私は 3D レンダリングのセットアップ (OpenGL の GLM で行われたすべての数学) に取り組んでおり、変換をどのように機能させたいかを除いて、すべて正しく機能します。次のように、エンティティごとにマトリックスを作成します。
matrix = mat4(1);
vec3 scale = GetWorldScale();
vec3 pos = GetWorldPosition(); // Returns pos + parent->pos
quat rot = GetWorldRotationQuat(); // Returns parent->rot * rot
matrix = glm::translate(matrix, pos);
matrix *= mat4_cast(rot);
matrix = glm::scale(matrix, scale);
right = matrix[0].xyz;
up = matrix[1].xyz;
direction = matrix[2].xyz;
これを使用すると、好みに合わせて一部を調整する方法がわからないことを除いて、通常は正しく機能します。つまり、これを使用すると、X 軸の平行移動が反転し (たとえば、左が正、Z 軸の前方が正ですが、私はそれをあまり区別しません)、Y 軸の回転が反転します。
この目的のための他のコードを見ると、多くの人が私が方向 (カメラ) に使用したものを否定しているようです。私もそれを行っており、変換は正しいですが、回転のすべての軸は推奨されるものとは反対です (ただし、方向が否定されているかどうかにかかわらず、X の回転は同じです)。
使用前に X 軸の平行移動と Y 軸の回転を無効にすることを除いて、これを修正するために何をすべきかよくわかりませんが、それは最善の方法ではないと感じています。考え?