Ich habe ein Paar GLSL Shader, die mir die Tiefenkarte der Objekte in meiner Szene geben. Was ich jetzt bekomme, ist die Entfernung von jedem Pixel zur Kamera. Was ich brauche, ist die Entfernung vom Pixel zur Kameraebene. Lassen Sie mich mit einer kleinen Zeichnung veranschaulichenTiefe als Abstand zur Kameraebene in GLSL
* |--*
/ |
/ |
C-----* C-----*
\ |
\ |
* |--*
Die 3 Sterne sind Pixel und das C ist die Kamera. Die Linien von den Sternchen sind die "Tiefe". Im ersten Fall erhalte ich den Abstand vom Pixel zur Kamera. In der zweiten möchte ich die Entfernung von jedem Pixel zum Flugzeug erhalten.
Es muss einen Weg geben, dies zu tun, indem Sie eine Projektionsmatrix verwenden, aber ich bin ratlos.
Hier sind die Shader, die ich benutze. Beachten Sie, dass eyePosition camera_position_object_space ist.
Vertex Shader:
void main() {
position = gl_Vertex.xyz;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Pixel Shader:
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);
}
Welche Art von Projektion verwenden Sie? Wenn Sie beim Rendern der Tiefenkarte eine orthographische Projektion verwenden, sollten Sie alles, was Sie benötigen, ohne Berechnungen erhalten. – Ani
Ich mache perspektivische Projektion beim Rendern, aber ich brauche die Tiefenwerte von der orthographischen Projektion. – Lucian