我正在研究一个 3D 渲染设置(所有数学都是使用 GLM for OpenGL 完成的),并且一切正常,除了我希望我的转换如何工作。我为每个实体创建一个矩阵,如下所示:
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 轴旋转,但我觉得这不是最好的方法。想法?