2014-10-16 4 views
2

저는 OpenGL 프로그램에서 작업 중이므로 경계 상자를 계산해야합니다. 코드를 만들었지 만 꼭지점 버퍼에서 꼭지점 좌표를 가져올 수 없습니다. 누군가가 버텍스 버퍼에서 데이터를 얻는 쉬운 방법을 설명 할 수 있습니까? Java for android and OpenGL es를 사용하고 있습니다.버텍스 버퍼를 버텍스 배열로 변환합니다.

+1

모든 프레임이 저하 될 가능성이 같은 GPU에서 정점 데이터를 다운로드하는 방법을 발견했습니다. 버텍스 정보의 로컬 복사본을 유지하십시오. –

답변

1

OpenGL ES 3.0 이상을 사용하는 경우 glMapBufferRange()을 사용하여 직접 버퍼 데이터에 액세스 할 수 있습니다. 기능에 대한 자세한 내용은 man page을 참조하고 Android에서는 Java 바인딩에 대한 자세한 내용은 GLES30 documentation을 참조하십시오.

ES 2.0에서이를 수행하는 합리적인 방법이 없다고 생각합니다. 나는 절대적으로 끔찍한 방법을 생각할 수는 있지만, 그 방향으로 인도하는 것이 좋지 않을 것입니다. 글쎄, 완벽을 위해서,하지만 을하지 말아라. : 렌더 타겟에 버텍스 데이터를 남기고, glReadPixels()으로 다시 읽는 것을 렌더링 할 수있다.

자신의 코드에서 정점 데이터에 자주 액세스해야하는 경우 복사본을 유지하면 더 잘 작동합니다. glBufferData()을 호출했을 때 이미 데이터가 있습니다. 현재 glBufferData() 콜 이후에 버려지는 경우 버텍스 데이터에 액세스해야 할 때마다 사용하고 유지하십시오.

+0

경계 상자를 계산해야하고 하위 집합의 정점 버퍼를 읽으려고했는데 접근성 오류가 발생합니다. 그래서 정점 배열을 시도하고 싶지만 내 코드가 아니기 때문에 코드를 쉽게 작성할 수 있습니다. – akira

+0

glbufferdata()를 사용해 보았습니다. – akira

0

는 내가 그것을

mFb= (FloatBuffer) vb.getData(UlVertexBuffer.VERTEX_FIELD_POSITION).position(0); 
    getmFloatArray(mFb); 
    mSb= (ShortBuffer) ib.getData(); 
    getmShortArray(mSb);