Это довольно просто сделать, если вы просто хотите использовать положение 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);
}
, который бы выглядел следующим образом:
У меня есть пример этого в этом примере кода iPad , который я собрал для своего класса OpenGL ES 2.0.