游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5565|回复: 7

4x4矩阵四个分量的几何意义,看了别人定义的,有点不解

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-6-11 17:30:00 | 显示全部楼层 |阅读模式
这段时间看了newton物理引擎,看了别人自定义的矩阵,使用起来和d3d的完全一样,但看了代码定义的着实有些不解
class dMatrix
{
public:
        dVector m_front;
        dVector m_up;
        dVector m_right;
        dVector m_posit;
};
这里面的第一个分量为什么取名字叫front(前)而第三个分量是right(右)呢
第2个是up(上)很好理解,没有问题,第四个是position(位移)也好理解
恰恰就是第一个和第三个分量,感觉名字反了,有点不明白。

反思了一阵子,矩阵的前三个分量应该代表的是空间的三个延展方向,也就是三个轴向量
其实看看单位矩阵
1,0,0,0
0,1,0,0
0,0,1,0
0,0,0,1
就知道分别代表的是正x轴,正y轴和正z轴,那么世界的单位矩阵应该是left, up ,front构成的啊

再看看绕y轴a角度的矩阵定义:
cos(a), 0, -sin(a), 0
     0, 1,       0, 0
sin(a), 0,  cos(a), 0
     0, 0,       0, 1

前三行向量是绕y轴旋转以后的新的三个轴,代表的是新的空间 x' y' z'轴的伸展方向

想了很久,终于想明白了4x4矩阵的前三个向量分别代表着新的齐次空间三轴x'y'z'轴相对于原来空间的延展方向,最后一个分量是新的位移,这样矩阵的几何意义非常清楚了。
我查了很多资料,对于4x4矩阵前三个向量的含义,基本上所有的资料都没有提,但我想我的理解应该没有问题,不然作者命名分量就不会取那么有“意义”的名字了。

可是newton的作者为什么偏偏第一个分量叫做front而第三个分量叫做right就有点不理解了,我觉得应该反过来,第一个分量叫right第三个分量叫front才对

除非他的坐标系x表示深度,z表示左右,可事实上我也试过了,并非入此,他的16个float和d3d的完全一致。

感觉很奇怪,是我的理解错误,还是作者的一个小小的命名上的失误呢?



362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-6-11 20:55:00 | 显示全部楼层

Re:4x4矩阵四个分量的几何意义,看了别人定义的,有点不解

矩阵代表一个变换。 (严格的说,是在一个指定的 base set中)

就好比,放大镜,不代表任何图像,但是可以放大图像。

所谓的“矩阵存储了几个向量”是断章取意。
一般指的是,在 基变换(view变换)中,矩阵中 正 好 存储了view坐标系的各向量。
(这是基变换公式决定的)

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2008-6-11 21:17:00 | 显示全部楼层

Re:4x4矩阵四个分量的几何意义,看了别人定义的,有点不解

矩阵可以看成是一个“相对(原来)的”齐次三维空间的姿态,前面三个向量是空间的三轴的方向,和比例,最后一个代表空间三轴交点的位置
很多教课书只说矩阵代表变换,只单纯从数学行列式角度上去解释,感觉这样太教条了,并没有正真把他的几何性质描述清楚,很不形象

下面这个定义
class dMatrix
{
public:
dVector m_front;
dVector m_up;
dVector m_right;
dVector m_posit;
};

是人家引擎里面定义的,并不是我断章取义,只是觉得顺序有点奇怪

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2008-6-11 21:44:00 | 显示全部楼层

Re:4x4矩阵四个分量的几何意义,看了别人定义的,有点不解

3D Math Primer For Graphics And Game Development

讲到了矩阵的各分量都能解释为转换后的坐标系统的基向量。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2008-6-11 22:01:00 | 显示全部楼层

Re:4x4矩阵四个分量的几何意义,看了别人定义的,有点不解

恩,看来我的理解应该没错,有时间去看看那本书。

9

主题

249

帖子

260

积分

中级会员

Rank: 3Rank: 3

积分
260
发表于 2008-6-14 09:20:00 | 显示全部楼层

Re:4x4矩阵四个分量的几何意义,看了别人定义的,有点不解

如果newton是右手坐标系的话,且作者在定位物体的方向时喜欢侧着看时,这种命名完全合理:
class dMatrix
{
public:
dVector m_front;
dVector m_up;
dVector m_right;
dVector m_posit;
};

9

主题

249

帖子

260

积分

中级会员

Rank: 3Rank: 3

积分
260
发表于 2008-6-14 09:42:00 | 显示全部楼层

Re:4x4矩阵四个分量的几何意义,看了别人定义的,有点不解

至于这种矩阵的数学原理,并不需要想的太抽象,很具体的。
相当于view矩阵旋转部分的转置。因为view矩阵是从xyz坐标系变换到right/up/look坐标系,而这里是从
right/up/look坐标系变换到xyz坐标系,其中right、up、look方向的给出都是相当于xyz坐标系的。

严格的数学推导也可以:那就是考虑right/up/look坐标系里的一点P(x,y,z),设其变换到xyz坐标系后是
Q(x,y,z),
对点P,分别考虑其经right、up、look各方向,然后在x上的投影总和,即得
Q(x) = P(x) * right(x) + P(y) * up(x) + P(z) * look(x),
Q点y和z分量的计算类似,
最终提取P向量和Q向量,即的变换矩阵。


class dMatrix
{
public:
dVector m_front;
dVector m_up;
dVector m_right;
dVector m_posit;
};
里,可能是作者定的初始方位是侧着看:
所以,物体的right成了front,
而look成了right

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2008-6-14 13:18:00 | 显示全部楼层

Re:4x4矩阵四个分量的几何意义,看了别人定义的,有点不解

所以说,我也很怀疑作者是侧着观测物体的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 06:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表