首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当α为1.0?时,OpenGL ES面看起来是透明的。

当α为1.0?时,OpenGL ES面看起来是透明的。
EN

Stack Overflow用户
提问于 2011-09-27 05:05:44
回答 1查看 717关注 0票数 0

我正在为我在iOS上的应用程序开发一个对象(OBJ文件)加载器,目前我已经成功地读取了对象的顶点和面,现在我只是为导入的模型添加颜色。

我现在遇到了一个大问题。从一个有六个面的立方体中走出来,除了两个相对的面被涂成蓝色外,所有的面都是红色的。这个立方体被设置为旋转,这样我就可以看到所有的边,但是颜色显示不正确,如下面的视频所示:

http://youtu.be/0L2AIFkd2Qk

蓝色的脸只显示当两个蓝色部分重叠时,我不知道为什么-我习惯于PC的OpenGL,是不是我遗漏了什么导致这种奇怪的颜色?

着色是通过为每个顶点发送一个格式为RGBA等的大型浮点数组来实现的;

代码语言:javascript
复制
// colours is the name of the array of floats
glColorPointer(colorStride, GL_FLOAT, 0, colors);   
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(renderStyle, 0, vertexCount);  

编辑

现在问题已经解决了,我只是从模型调用中绘制所有的三角形

代码语言:javascript
复制
glColor4f(0.5f, 0.5f, 0.0f, 1.0f);
glDrawArrays(GL_TRIANGLES, 4, 4);

整个数组只有一次,当我为模型中的每个面拆分它时,它允许我使用GL_DEPTH_TEST,而不会导致屏幕变成空白!

EN

回答 1

Stack Overflow用户

发布于 2011-09-27 17:10:12

问题是GL_DEPTH_TEST被禁用了。Opengl没有做任何深度测试,所以你所有的对象看起来都很奇怪。为了启用深度测试,您必须创建自己的新渲染缓冲区。这是一个关于如何创建这个缓冲区的小片段:

代码语言:javascript
复制
// 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“扩展即可。创建深度缓冲区后,现在可以像这样启用深度测试:

代码语言:javascript
复制
    glEnable(GL_DEPTH_TEST);

我自己也有过几次这样的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7561312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档