我有一对 GLSL 着色器,可以为我提供场景中对象的深度图。我现在得到的是每个像素到相机的距离。我需要的是获得从像素到相机平面的距离。让我用一张小图来说明
* |--*
/ |
/ |
C-----* C-----*
\ |
\ |
* |--*
3 个星号是像素,C 是相机。星号线是“深度”。在第一种情况下,我得到了从像素到相机的距离。第二,我希望得到每个像素到平面的距离。
必须有一种方法可以通过使用一些投影矩阵来做到这一点,但我很难过。
这是我正在使用的着色器。注意 eyePosition 是 camera_position_object_space。
顶点着色器:
void main() {
position = gl_Vertex.xyz;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
像素着色器:
uniform vec3 eyePosition;
varying vec3 position;
void main(void) {
vec3 temp = vec3(1.0,1.0,1.0);
float depth = (length(eyePosition - position*temp) - 1.0) / 49.0;
gl_FragColor = vec4(depth, depth, depth, 1.0);
}