如何根据OpenGL ES 2.0的深度为OpenGL ES 2.0添加颜色?

Pik*_*iku 6 shader opengl-es glsl ios opengl-es-2.0

我正在编写一个OpenGL ES 2.0游戏(在iOS上).如何创建着色器(因为我假设在着色器中这样做更简单),因此距离原点(在Z轴上)的几何体看起来更暗?

这张照片中的水说明了我的想法

Zarch http://www.bytecellar.com/wp-content/uploads/2010/12/Zarch_screen.png

Bra*_*son 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;
}
Run Code Online (Sandbox Code Playgroud)

和片段着色器一样

varying highp float zDepth;

void main()
{
    gl_FragColor = vec4(zDepth, zDepth, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

这将产生以下外观:

深度阴影的OpenGL茶壶

我在为我的OpenGL ES 2.0类组装的这个iPad示例代码中有一个这样的例子.