2014-11-30 2 views
0

Vuforia iOS 예제에서 사용자 정의 모델을 그리는 데 문제가 있습니다 만 그저 OpenGLES 2.0 코드 일뿐입니다. 그것은 정점이 많습니다 (100 K). 그러나 테스트를 위해 저는 프래그먼트 쉐이더에서 사용자 정의 색상을 지정하고 있습니다.이 모델은 다른 모델에서 테스트를 마쳤습니다. 지금은이 기능이 작동 할 때까지는 VBO를 사용하지 않습니다.glDrawElements가 모든 지오메트리를 그려지지 않습니다.

TESFPositions float 배열입니다. x, y, z, x, y, z ... TESFIndices는 GLuint 배열입니다.

glUseProgram(shaderProgramID); 
glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, (const GLfloat*)&modelViewProjection.data[0]); 
glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, TESFPositions); 
glEnableVertexAttribArray(vertexHandle); 
//glDrawArrays(GL_TRIANGLES, 0, TESFVertices); <-- Works fine 
glDrawElements(GL_TRIANGLE_STRIP, sizeof(TESFIndices)/sizeof(GLuint), GL_UNSIGNED_INT, (GLvoid*)TESFIndices); <-- Some geometry is missing 

아이디어가 있으십니까? 고맙습니다.

+0

정확히 무엇이 문제입니까? ...? – Unheilig

+0

주제가 말하는 것처럼 모든 지오메트리를 그려지는 않습니다. 그것은 역사적인 건물이고 glDrawElements를 사용하는 동안 일부 외관이 보이지 않지만 동일한 코드이지만 glDrawArrays (주석 처리 된 라인)를 사용하여 ok로 나타납니다 –

답변

0

인덱스 버퍼 수가 적기 때문에 오버플로가 발생하는 것이 일반적입니다. 인덱스는 16 비트 부호없는 정수가 될 가능성이 가장 높기 때문에 최대 인덱스는 65k를 넘을 수 있습니다 (65545).

이 문제를 해결하려면 형식을 더 큰 값으로 변경해보십시오.하지만 모든 장치가 16 비트보다 큰 인덱스를 지원하지는 않습니다. 지원되지 않는 경우 모델을 몇 개의 작은 모델로 분리해야합니다. 디자인 타임이나로드 타임에이 작업을 수행 할 수 있습니다.

+0

[read] (https://www.opengl.org/wiki/)에 따라 OpenGL_Type), 부호없는 정수는 32 비트 값이고, 부호없는 short는 16입니다. 그래서 인덱스에 gluint를 사용하고 있습니다. –

+0

그래도 문제가 정확히 무엇인지 의심할만한 이유가 있습니다. 이 오버플로는 수입업자에게도 발생할 수 있는데, 이는 인출 호출 전에 가장 큰 색인 값을 인쇄하여 검사하거나 내부적으로 발생할 수 있습니다 (GLuint는 무시됩니다) ... –