2013-03-21 111 views
0

我在Mac OS X程序中使用了glDepthRange(1.0,0.0)来给自己一个右手坐标系。显然,我没有使用OpenGL ES 2.0的iOS选项。是否有一个快速解决方案,让更高的z值出现在前面,还是必须重新计算我的所有数学?在OpenGL ES 2.0 for iOS中glDepthRange发生了什么变化?

+0

我的理解是,OpenGL ES 2.0的是GL API重启和空白的石板。除了快速访问GPU之外,所提供的内置功能非常少。所以,你必须推出自己的。或者,某些Apple提供的着色器可能能够提供您想要的内容。 – nielsbot 2013-03-21 20:59:47

+0

深度测试是核心功能。我仍然可以指定大部分深度测试已完成,如深度函数。虽然也许有些东西我不知道。编辑我的着色器将有资格成为“重做我的数学”。 – AbleArcher 2013-03-21 21:20:11

+0

对不起 - 这就是我所知道的。我相信你仍然可以访问深度缓冲区,但是......我认为这取决于你的着色器决定是否绘制或不在某个像素。让我们希望GL ES 2.0专家编钟:) – nielsbot 2013-03-21 21:23:27

回答

3

以及你可以尝试glDepthFunc。如果使用GL_GREATER,默认值为GL_LESS,则会渲染具有较高z值的像素。

glDepthFunc(GL_GREATER); 

或者,您可以在顶点着色器中加入这一行

gl_Position.z = -gl_Position.z; 
+0

如果我使用glDepthFunc(GL_GREATER)(或glDepthFunc(GL_GEQUAL)),则根本没有任何显示。我记得在原始程序中发生了这种情况,所以(我认为)我遵循了使用glDepthRange()的建议。你知道可能会发生什么事情吗? – AbleArcher 2013-03-22 02:07:12

+0

glDepthRangef(1.0,0.0)不工作?注意:有一个“f” – DanP 2013-03-22 02:28:30

+0

*你没有看到任何使用glDepthFunc(GL_GREATER)的东西,因为深度的默认值是1.0,你可以使用glClearDepthf更改深度的默认值 – DanP 2013-03-22 02:31:59