gpt4 book ai didi

c++ - 旋转 4x4 矩阵会导致随时间缩放

转载 作者:行者123 更新时间:2023-11-30 00:38:18 26 4
gpt4 key购买 nike

我正在使用 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 有标准化矩阵的函数吗,还是我必须自己写一个?

最佳答案

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

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

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

关于c++ - 旋转 4x4 矩阵会导致随时间缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com