1

我正在使用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而不是2 分钟stepTime * 50.f),立方体在 X 和 Z 轴上明显缩放,这两个轴上的缩放在任何时候都是相同的(高度立方体的大小从不改变,但宽度和深度的变化量完全相同)。在 的情况下5000.f, 变小, 和正常的50.for 100.f, 变大。

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

4

2 回答 2

7

如果它是增量的、累积的、精度损失:不要就地更新立方体,而是保留原始未旋转的立方体并跟踪总旋转角度。然后在每一步从原始未旋转的立方体创建一个立方体,由总累积的旋转角度转换。这样,您的多维数据集就不会遇到累积舍入问题。

编辑:针对与 Miles 的讨论,更合适的答案是:

如果您可以分离变换矩阵的旋转分量和平移分量,并且问题主要在于旋转的累积引入了剪切或缩放,则可以通过从旋转分量中提取角度并重新创建旋转矩阵来纠正问题那个角度但是单位长度。

于 2012-06-29T21:21:15.977 回答
0

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

于 2012-06-29T21:20:58.210 回答