Objective c alpha为1.0时,OpenGL ES面看起来是透明的?
我正在iOS上为我的应用程序开发一个对象(OBJ文件)加载程序,目前我已经成功读取了对象的顶点和面,现在我正在为导入的模型添加颜色 我现在遇到了一个大问题。从一个有六个面的立方体中,除了两个相对的面是蓝色外,所有面都是红色。此立方体设置为旋转,因此我可以看到所有侧面,但颜色显示不正确,如以下视频所示: 蓝色的脸只有在两个蓝色部分重叠时才会显示,我不明白为什么-我习惯了OpenGL for PC,是不是我缺少了什么导致这种奇怪的颜色 通过为每个顶点发送RGBA RGBA RGBA等格式的大浮点数组来实现着色Objective c alpha为1.0时,OpenGL ES面看起来是透明的?,objective-c,ios,opengl-es,colors,transparency,Objective C,Ios,Opengl Es,Colors,Transparency,我正在iOS上为我的应用程序开发一个对象(OBJ文件)加载程序,目前我已经成功读取了对象的顶点和面,现在我正在为导入的模型添加颜色 我现在遇到了一个大问题。从一个有六个面的立方体中,除了两个相对的面是蓝色外,所有面都是红色。此立方体设置为旋转,因此我可以看到所有侧面,但颜色显示不正确,如以下视频所示: 蓝色的脸只有在两个蓝色部分重叠时才会显示,我不明白为什么-我习惯了OpenGL for PC,是不是我缺少了什么导致这种奇怪的颜色 通过为每个顶点发送RGBA RGBA 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_测试,而不会导致屏幕变为空白 问题在于GL_深度_测试被禁用。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);
我自己也有过几次这个问题。您确定深度测试已启用吗?glEnable(GLU深度试验);在你展示的视频中,我觉得深度测试没有启用,因此立方体有一个奇怪的方面。不,当我启用它时,屏幕会完全变黑,我不知道为什么?谢谢你的回答,但问题现在已经解决了,这是由我画三角形的方式造成的;我又开始了这个项目,它成功了。当我在屏幕完全空白之前尝试GL_深度_测试时!