旋转4x4矩阵会导致时间缩放

Mil*_*les 1 c++ opengl rotation matrix scenegraph

glm::rotate用来旋转场景中立方体的变换矩阵.

"cube->t = glm::rotate(cube->t, stepTime * 50.f, glm::vec3(0.f, 1.f, 0.f));"每帧调用一次,其中cube->t是所讨论的矩阵.

奇怪的是,在20分钟的过程中(如果我旋转stepTime * 5000.f而不是两分钟stepTime * 50.f),立方体在X和Z轴上显着缩放,这两个轴上的缩放始终相同(高度)立方体永远不会改变,但宽度和深度改变的数量完全相同).在5000.f变小的情况下,与正常50.f100.f变大.

我认为这可能是一个舍入错误的问题,但除此之外我不知道是什么原因导致它.这是舍入错误吗?我可以通过定期规范化矩阵来解决它吗?glm是否具有规范化矩阵的功能,还是我必须自己编写一个?

Ale*_*son 7

如果是增量,累积,精度损失:不是就地更新立方体,而是保持原始的未旋转立方体并跟踪总旋转角度.然后在每个步骤中,从原始未旋转的立方体创建一个立方体,通过总累积旋转角度进行变换.通过这种方式,您的多维数据集不会受到累积舍入问题的影响.

编辑:回应与Miles的讨论,一个更合适的答案:

如果可以分离的变换矩阵的旋转和平移分量,并且该问题主要是与旋转导入剪切或结垢的积聚,则可以通过从旋转分量提取的角度并重新创建与旋转矩阵纠正该问题那个角度但单位长度.