我正在编写OpenGL ES 2.0游戏(在iOS上)。如何创建一个着色器(因为我认为在着色器中这样做会更简单),以便远离原点的几何(在Z轴上)显得更暗?
此图像中的水说明了我所想到的效果
(来源:bytecellar.com)
最佳答案
如果您只想使用几何图形的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);
}
这将产生以下外观:
我在为OpenGL ES 2.0类组装的this iPad sample code中有一个示例。