在绘图GL_POINTS和GL_TRIANGLES之间切换

时间:2012-08-17 01:02:28

标签: iphone objective-c opengl-es opengl-es-2.0

我写了一个简单的iphone程序,绘制一个立方体,在屏幕视图中用户点击之间切换绘图模式。

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glUseProgram(_program);

glBindVertexArrayOES(_vertexArray);
glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _modelViewProjectionMatrix.m);
glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, _normalMatrix.m);
if (_drawGLPointsMode)
    glDrawElements(GL_POINTS, sizeof(CubeIndices)/sizeof(CubeIndices[0]), GL_UNSIGNED_BYTE, 0);
else
    glDrawElements(GL_TRIANGLES, sizeof(CubeIndices)/sizeof(CubeIndices[0]), GL_UNSIGNED_BYTE, 0);

在上面的代码中,_drawGLPointsMode是一个在Taps之间变换的BOOL。我遇到的问题是,当使用GL_TRIANGLES绘图时,不会绘制立方体。当切换到使用GL_POINTS绘制时,它可以工作。

任何人都可以帮助我,我觉得我的代码存在根本缺陷。提前谢谢。

修改

glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(CubeVertices), CubeVertices, GL_STATIC_DRAW);

glGenBuffers(1, &_vertexIndexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _vertexIndexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(CubeIndices), CubeIndices, GL_STATIC_DRAW);

我也尝试将GL_STATIC_DRAW更改为GL_DYANMIC_DRAW,但我得到了相同的结果。此外,如果我在iphone模拟器中运行当前代码一切正常,只有在实际设备(iphone 4S)上运行时才能看到此问题。谢谢!

0 个答案:

没有答案