1
OpenGL es 2.0에서 안드로이드 용 c/C++ (NDK)를 사용하고 있습니다. GLM 라이브러리를 사용하고 있습니다!glDrawElements는 무언가를 그리지 않습니다
지금까지 glDrawArrays를 사용하여 검정색 배경에 흰색 삼각형을 그릴 수 있지만 glDrawElements를 사용하여 동일한 삼각형을 그릴 때 아무 것도 그려지지 않습니다.
관련 코드 :
float triangleCoords[] = { // in counterclockwise order:
0, 5, 5, // top
-5, 0, 5, // bottom left
5, 0, 5 // bottom right
};
float color[] = { 1,1,1, 1.0f };
GLuint drawOrder[]={0,1,2};
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(program);
int positionHandle=glGetAttribLocation(program,"vPosition");
int matrixHandle = glGetUniformLocation(program, "uMVPMatrix");
glEnableVertexAttribArray(positionHandle);
glUniformMatrix4fv(matrixHandle,1,GL_FALSE,glm::value_ptr(mvpMatrix));
glVertexAttribPointer(positionHandle,3,GL_FLOAT,GL_FALSE,0,triangleCoords);
int colorHandle =glGetUniformLocation(program, "vColor");
glUniform4fv(colorHandle, 1, color);
//glDrawArrays(GL_TRIANGLES, 0, 3); <== This works
glDrawElements(GL_TRIANGLES,3,GL_UNSIGNED_INT,drawOrder); <== This does not works
glDisableVertexAttribArray(positionHandle);
//swapbuffers and stuff
쉐이더가
std::string vertexShaderCode =
"attribute vec4 vPosition; "
"uniform mat4 uMVPMatrix; "
"void main() {"
" gl_Position = uMVPMatrix*vPosition;"
"}";
std::string fragmentShaderCode =
"precision mediump float;"
"uniform vec4 vColor;"
"void main() {"
" gl_FragColor = vColor;"
"}";
잘 했어 선생님, 트릭을했다. 그러나 인덱스의 최대 수를 65k로 제한하여 전화 GPU의 킬러가 될 수 있지만 데스크톱 버전에 비해 ES가 여전히 불리합니다. 호기심을 위해서, 65k를 넘는 색인을 붙이기위한 해결 방법이 있습니까? – Allahjane
큰 메쉬는 제한된 크기의 작은 메쉬로 분할하고 각 메쉬마다 다른 배열을 사용해야합니다. 제한은 프레임 당 렌더링 할 수있는 총 삼각형 수에 영향을주지 않습니다. – samgak