从全局位置/旋转/缩放更新局部位置/旋转/缩放
Updating local position/rotation/scale from global position/rotation/scale?
>假设我有一个包含 3 个向量的类(一个用于位置,一个用于缩放,一个用于旋转),我可以使用它们生成一个转换矩阵,该矩阵象征对象在 3D 空间中的位置、旋转和大小。然后我在对象之间添加父/子关系,我将子项的局部变换矩阵乘以父项的全局变换矩阵,我得到子项的全局矩阵,这是我用于渲染对象的全局矩阵,因此当父项旋转时,子项像轨道一样围绕它旋转。现在我需要能够获得子矩阵的本地转换(不是整个矩阵,只是单独的组件)。我知道孩子的全局变换,也知道父母的全局变换。
我可以通过将子项的全局变换乘以父项的反转变换来获得子项的局部变换。但是,我真的需要能够具体做到这一点:
1.To 能够获得孩子的本地位置,只需知道它的全局位置和父母的全局位置,而无需生成任何矩阵;
2.To 能够获得子项的局部旋转,只需知道它是全局旋转和父项的全局旋转,而无需生成任何矩阵;
3.To 能够获得孩子的局部尺度,只需知道它是全球尺度和父母的全球尺度,而无需生成任何矩阵;
如果你想要这些答案,那么它应该是相当前卫的(即减去孩子的部分位置以获得孩子的相对位移)。但是,我假设您想一起重建所有这些。如果你开始写下数学,你会想出一个方程组,给你这些东西(旋转需要考虑位移等等)。问题是计算与反转矩阵和执行乘法完全等效(所需的计算次数相同),因此无论如何您都不会通过这样做得到任何东西(可能会犯错误或使其对缓存不那么友好)。
通常这些东西的设计是使用堆栈并始终保持相对于父级的更改。然后,当您想要执行某些操作时,您可以浏览对象层次结构并在此过程中将矩阵相乘,保留一个堆栈,以便当您向上移动父级时,您会在堆栈上执行弹出而不是矩阵的逆乘法。通过这种方式,您可以获得非常好的性能,并且对象更稳定,因为您不会使用它们进行太多计算(将矩阵与其逆矩阵相乘很少会给出完美的单位矩阵)。
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 计算缩放多边形的比例,得到给定的多边形面积
- QwtPlot具有相等的轴和自动缩放
- 如何在directx/c++中进行平移/缩放操作
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何在OpenGL中正确旋转和缩放对象?
- 如何在特定点平移、旋转和缩放
- OpenCV 检测多个旋转的缩放对象
- 在Cocos2DX V3中.如何使用不同的中心缩放和旋转
- 如何仅使用数学方法旋转16x16位图数组的内容(无缩放,只需剪切角)
- 旋转 4x4 矩阵会导致随时间推移而缩放
- 缩放和旋转 模板匹配
- 从全局位置/旋转/缩放更新局部位置/旋转/缩放
- 在GLM中旋转、缩放和平移二维点
- 如何缩放四元数的旋转
- opencvc++模板/模式匹配缩放和旋转不变量
- 是否有可能得到两个图像之间的旋转和缩放只有一个冲浪描述符
- 通过原始缓冲区数据缩放和旋转纹理到另一个纹理上
- 如何用平移、旋转和缩放来反转一个仿射变换