首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >4x4 3D矩阵操作

4x4 3D矩阵操作
EN

Stack Overflow用户
提问于 2014-09-18 23:41:25
回答 2查看 1K关注 0票数 0

我目前正在与C#合作一个游戏项目,我正在研究如何在3D空间中移动相机。我有一个4x4的全球世界矩阵。我知道这个矩阵处理物体在空间中的平移和旋转。我现在知道第三行处理对象的位置,所以我可以沿着xyz平面移动相机。然而,我想要执行沿局部轴和全局轴旋转相机。参考this post,我有一个如何旋转相机的想法。然而,我希望对矩阵有更清楚的了解,以及就平移和旋转而言,不同的行和列代表什么。我还想知道4x4矩阵是否包含有关相机的局部和全局位置的信息。这意味着我可以操纵矩阵来围绕外部轴或点旋转相机吗?给出这个矩阵,我可以对相机做多少操作?

EN

回答 2

Stack Overflow用户

发布于 2014-09-19 05:54:07

在回答真实的(1)问题时,3D数学比你想象的要复杂得多。

现在忽略四元数,矩阵可以被认为是:

代码语言:javascript
复制
Rx Ry Rz 0
Ux Uy Uz 0
Ax Ay Az 0
Px Py Pz 1

或者它可能是上述内容的转置,这取决于您如何设置系统,但最终它确实没有什么区别,并且在很大程度上取决于您的硬件。R是右轴,U是上方轴,A是At轴,P是位置。表示每个向量的分量的x、y和z后缀。这很容易可视化:想一想一组正交的单位向量,前三个定义旋转,最后一个是矩阵在世界上的位置,这就是上面的矩阵。

一旦你了解了上面的内容,移动它应该是相当容易的。然而,旋转它要复杂得多。看东西很简单:

代码语言:javascript
复制
 A = |target pos - camera pos| (pos is bottom row here)

然后R和U是A和指向正确方向的全局轴的叉积。

矩阵可以绕任意轴旋转(您提到的局部轴和全局轴都在其中),但数学非常复杂(对于这个答案来说太复杂了)。

这个站点更详细:Wikipedia这里列出了一些标准的矩阵运算。你也可以访问Wolfram网站进行更深入的讨论,如果你去看看,那里肯定有很好的在线资源。

矩阵可以相乘,结果是每个矩阵单独执行的操作的有效组合。因此,你可以有一个矩阵作为一般的运动(单位,轴对齐的方向部分向量),另一个矩阵可以是(0,0,0)处的旋转矩阵。这两个矩阵的乘积就是运动和旋转矩阵。这就是世界上对象层次结构和对象放置的工作方式。此外,它也被用于动画中。

您正在使用的API应该提供一个绕任意轴旋转矩阵的API,但这对于了解发生了什么很有用。

一旦你想通了所有这些,你就可以看看四元数了。只需记住,对于四元数,没有什么是不能用矩阵来做的。

(1)据我所知

票数 1
EN

Stack Overflow用户

发布于 2014-09-19 00:42:06

在3d图形中,旋转是由四元数而不是矩阵表示的。有一组函数可以操作四元数。

你可以用四元数来perform rotation along any axis你想要的。您可以很容易地组合甚至(这几乎不可能是矩阵)对四元数进行插值。

四元数可以转换为矩阵,这是产生任何旋转矩阵的方式。如果要将旋转应用于对象或将旋转与其他变换(如平移或缩放)组合,则应首先将四元数转换为矩阵。

无论你实际使用的是哪种DirectX,APIs都是一个关于矩阵和四元数信息的很好的来源--在所有3DAPI中数学是统一的。

关于矩阵行/列含义的问题:矩阵可以表示相当复杂的变换,包括跨对象的几何中心以外的点进行缩放或旋转。所以你不应该以这种方式考虑矩阵,你应该把一个复杂的矩阵想象成简单矩阵的乘法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25917020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档