レイ マーチングのデモを作成していますが、カメラ軸の回転に問題があります。クォータニオンを使用してマウスを回転させ、その方向に光線をうまくキャストします。問題の例: ヨーで 180°回転してWを押すと、前方ではなく後方に移動します。翻訳などいろいろ試しましたが、うまくいきませんでした。レイ キャスティング アルゴリズム用に移動カメラを作成する方法が間違っているのではないかと考えています。lookAt 関数:
vec4 rotor = quatRotor(vec3(0., -1., 0.), -iMouse.x);
rotor = quatMult(rotor, quatRotor(vec3(1., 0., 0.), iMouse.y));
vec3 f = normalize(center - eye);
vec3 r = normalize(cross(vec3(0.0, 1.0, 0.0), f));
vec3 u = normalize(cross(f, r));
float fov = radians(45);
vec4 dir = vec4(normalize(uv.x * r + uv.y * u + f * fov), 1.0);
mat4 m;
m[ 0 ][ 0 ] = r.x;
m[ 0 ][ 1 ] = r.y;
m[ 0 ][ 2 ] = r.z;
m[ 1 ][ 0 ] = u.x;
m[ 1 ][ 1 ] = u.y;
m[ 1 ][ 2 ] = u.z;
m[ 2 ][ 0 ] = -f.x;
m[ 2 ][ 1 ] = -f.y;
m[ 2 ][ 2 ] = -f.z;
m[ 3 ][ 0 ] = center.x;
m[ 3 ][ 1 ] = center.y;
m[ 3 ][ 2 ] = center.z;
m[ 3 ][ 3 ] = 1.0;
dir = m * dir;
dir.xyz = quatRotate(dir.xyz, rotor);
return dir;
eye変数は、ユニフォームである WASD キー値を保持します。それらの初期化された値はvec3(0, 0, -1)
、それぞれ xyz 用です。
中心はで、uv変数は私が描いている現在のピクセルです。vec3(0,0,0)