![]() |
1
8
实际上,结果 应该 与众不同(即使你不考虑累积误差,如上所述)。原因是顺序在旋转中很重要:绕X旋转,然后绕Y旋转,这与绕Y旋转,然后绕X旋转不同。 在矩阵表示法中(据我了解您的设置),您有以下理想行为:
关于伪代码的一些注释:这里的约定是我们从左到右乘矩阵(这意味着点是行向量)。另外,如果不清楚,
对于累积情况,OQ从一个单位矩阵开始,乘以小的旋转。
对于赋值情况,计算出
重点是这些是 不同的矩阵 即使有了完美的数学,他们也应该看起来与众不同。 你应该选择哪一个取决于你想要什么样的行为。累积版本将非常接近围绕X和Y轴之间的对角线轴旋转;分配版本的作用类似于旋转框架。 如果您确实想要累积行为,有比将最多500个矩阵相乘更好的方法(如上所述,您的矩阵将由于浮点错误而漂移)。具体来说,可以围绕Z轴旋转45度,然后围绕X轴旋转frame/500,然后围绕Z轴旋转-45度,以获得类似效果。 阐述这两种情况的区别: 在累积的情况下,你在x上旋转一点,然后在y上旋转一点,重复很多次。如果旋转很小,两个小旋转组合的结果将是围绕 一些 轴(如果它们不是那么小,轴可能不完全在两者之间,但它仍然是一个特定的旋转)。关键是,如果你重复这对旋转,结果将是在那个轴上,越来越多的旋转,不管它是什么。 在作业的例子中,你做的是关于x的所有旋转,然后是关于y的所有旋转。这使得旋转变大,这就有了区别。可视化差异的一种方法是想象一组坐标轴:大X轴旋转会使原始Y轴偏离直线,因此Y轴旋转的应用方式不同。
在数学术语中,之所以存在如此大的差异,是因为一般来说,旋转不是交换的:换句话说,顺序很重要。注意,小的旋转是
大约
可交换的(当旋转角度接近零时,
|
![]() |
2
2
区别似乎是第一个样本 改变 当前世界矩阵由旋转矩阵构成。第二个样本 替换 世界矩阵由旋转矩阵构成。如果在此之前没有对世界矩阵应用其他操作,您可能看不到任何区别,但是如果在此之前应用了任何操作,则第二个代码示例将丢弃这些操作。 问题是,你是否希望你对世界矩阵的改变是累积的?第一个代码示例会给您一个累积的效果,第二个不会。 |
![]() |
shirshamay · 并非3D立方体显示的所有侧面 11 月前 |
![]() |
MirceaKitsune · 获取从一个点到最近长方体的距离 1 年前 |
![]() |
Hadi Ayoub · 如何使JavaFX3DBox透明 1 年前 |
![]() |
John Marston · 如何创建三个角度相等的三维矢量? 1 年前 |
![]() |
Krystal · 如何在三维绘图中绘制多维数组? 1 年前 |
![]() |
yldbear77 · 如何使用assimp获取纹理文件? 1 年前 |
![]() |
nona · Pyrender中的世界到像素转换 1 年前 |
|
Dronius · Three.js光线投射不适用于移动对象 1 年前 |