我正在为我在iOS上的应用程序开发一个对象(OBJ文件)加载器,目前我已经成功地读取了对象的顶点和面,现在我只是为导入的模型添加颜色。
我现在遇到了一个大问题。从一个有六个面的立方体中走出来,除了两个相对的面被涂成蓝色外,所有的面都是红色的。这个立方体被设置为旋转,这样我就可以看到所有的边,但是颜色显示不正确,如下面的视频所示:
蓝色的脸只显示当两个蓝色部分重叠时,我不知道为什么-我习惯于PC的OpenGL,是不是我遗漏了什么导致这种奇怪的颜色?
着色是通过为每个顶点发送一个格式为RGBA等的大型浮点数组来实现的;
// colours is the name of the array of floats
glColorPointer(colorStride, GL_FLOAT, 0, colors);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(renderStyle, 0, vertexCount); 编辑
现在问题已经解决了,我只是从模型调用中绘制所有的三角形
glColor4f(0.5f, 0.5f, 0.0f, 1.0f);
glDrawArrays(GL_TRIANGLES, 4, 4);整个数组只有一次,当我为模型中的每个面拆分它时,它允许我使用GL_DEPTH_TEST,而不会导致屏幕变成空白!
发布于 2011-09-27 17:10:12
问题是GL_DEPTH_TEST被禁用了。Opengl没有做任何深度测试,所以你所有的对象看起来都很奇怪。为了启用深度测试,您必须创建自己的新渲染缓冲区。这是一个关于如何创建这个缓冲区的小片段:
// Create the depth buffer.
glGenRenderbuffersOES(1, &m_depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES,
GL_DEPTH_COMPONENT16_OES, width, height);这个缓冲区是为OpenGL ES 1.1创建的,对于2.0,只需删除所有"OES“扩展即可。创建深度缓冲区后,现在可以像这样启用深度测试:
glEnable(GL_DEPTH_TEST);我自己也有过几次这样的问题。
https://stackoverflow.com/questions/7561312
复制相似问题