我正在编写一个OpenGL ES 2.0游戏(在iOS上)。如何创建着色器(因为我假设在着色器中这样做更简单),因此距离原点(在Z轴上)的几何体看起来更暗?
此图中的水说明了我的想法
Zarch http://www.bytecellar.com/wp-content/uploads/2010/12/Zarch_screen.png
答案 0 :(得分:8)
如果您只想使用几何体的Z位置,这很简单。您可以使用如下的顶点着色器:
attribute vec4 position;
varying float zDepth;
uniform mat4 modelViewProjMatrix;
void main()
{
vec4 newPosition = modelViewProjMatrix * position;
gl_Position = newPosition;
zDepth = (2.0 - (1.0 + newPosition.z))/2.0;
}
和片段着色器一样
varying highp float zDepth;
void main()
{
gl_FragColor = vec4(zDepth, zDepth, 0.0, 1.0);
}
会产生以下外观:
我在this iPad sample code中为我的OpenGL ES 2.0课程组装了一个例子。
答案 1 :(得分:0)
我用@brad提供了一个相当有趣的测试。我只是更改了一行:
gl_FragColor = vec4(1.0, 1.0, 0.0, zDepth);
阿尔法没有发生任何事情。对于Alpha
来说,是我还是缺少其他东西?