私は、私のシーンのオブジェクトの奥行きマップを与える一対のGLSLシェーダを持っています。私が今取得するのは、各ピクセルからカメラまでの距離です。私が必要とするのは、ピクセルからカメラ面までの距離を得ることです。少し描いてみましょう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);
}
どのような投影法を使用していますか?この場合、別のモデルビューと投影行列を使用する必要はありません。奥行きマップをレンダリングするときに正射投影を使用する場合は、何も計算せずに必要なものを得る必要があります。 – Ani
私はレンダリング時に透視投影を行っていますが、正射影投影から深度値が必要です。 – Lucian