OpenGL ES 2.0で動作するキューブマップを使用してリフレクションマッピングを取得しようとしています。フラグメントシェーダのsamplerCubeに正しく反映されるように反射方向を計算しているかどうかはわかりません。GLSLでのリフレクションマッピング
まず、Projection、Model、View MatrixとModelViewマトリックスを組み合わせたものを用意しました。ここではGLSLの私の頂点シェーダのコードは次のとおりです。
attribute vec4 Position;
attribute vec3 Normal;
uniform mat4 Projection;
uniform mat4 ModelView;
uniform mat3 Model;
uniform mat4 ModelViewProjectionMatrix;
uniform vec3 EyePosition;
varying vec3 ReflectDir;
void main()
{
gl_Position = Projection * ModelView * Position;
mediump vec3 EyeDir = normalize(Position.xyz - EyePosition);
// Reflect eye direction by normal, and transform to world space
ReflectDir = Model * reflect(EyeDir, Normal);
}
私の仮定はEyeDirectionは、オブジェクト空間内にある必要があります。 (正解?) オブジェクト空間でEyePositionを取得するにはどうすればよいですか?逆ModelView行列でカメラの位置を(つまり常にOpenGLの{0,0,0}に)変換するだけですか?
私はこれを試しましたが、ReflectDirが間違っているかのように、私のフラグメントシェーダがすべて黒に塗りつぶしています。
XcodeでOpenGL ES 2.0リフレクションマッピング(samplerCubeを使用)の実例がありますか?
「モデル」とは何ですか?そして、あなたがこれをするときに起こっていることは間違っていますか? –
モデルは、オブジェクト空間座標をワールド空間座標に変換する変換行列です。オブジェクトがレンダリングされると、完全に黒ですが、フラグメントシェーダのReflectDirを使用してsamplerCubeから色をサンプリングすることになっています。だから、ReflectDirを計算する方法に何か問題があると思う。 – user1081465