-->

旋转4x4矩阵导致缩放不随时间(Rotating a 4x4 Matrix Causes Scali

2019-09-28 17:49发布

我使用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是否有标准化矩阵的功能,还是我写一个自己?

Answer 1:

如果是的精度增量,累加,损失:代替就地更新立方体,保持原来的未旋转立方和跟踪的总旋转角度的。 然后在每个步骤创建从原始未旋转的立方体立方体,由总的累积的旋转角变换。 这样,您的多维数据集将不会从累积的四舍五入问题的困扰。

编辑:针对与万里,更合适的答案的讨论:

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



Answer 2:

是的,这是一个舍入误差。 一个合理的解决方案是将取向为单个数字,并在每帧从头开始构建的矩阵。



文章来源: Rotating a 4x4 Matrix Causes Scaling Over Time