游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1977|回复: 4

3d max中Node节点的矩阵变换问题,请教?刚刚名字发错了

[复制链接]

8

主题

20

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2005-3-7 10:23:00 | 显示全部楼层 |阅读模式
Matrix3 matNodeLocalTM = pNode->GetNodeTM(0);
// parent matrix
Matrix3 matNodeParentTM = pNode->GetParentTM(0);
if(matNodeLocalTM == matNodeParentTM)
matNodeLocalTM.IdentityMatrix();
else
matNodeLocalTM = matNodeLocalTM * Inverse(matNodeParentTM);

请问,为什么获得当前节点变换矩阵和父节点变换矩阵相等时,要单位化当前矩阵,而不等时确要相乘父节点变换矩阵的逆矩阵?

做这些的作用是什么?


刚刚名字搞错了。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-7 11:13:00 | 显示全部楼层

Re:3d max中Node节点的矩阵变换问题,请教?刚刚名字发错了

我想是想让子节点的运动和父节点的运动统一。
如果运动矩阵相同的话,则直接用父节点的运动矩阵,子节点的运动矩阵为identity
如果不相同的话,则实际变换的时候,先变换子节点本身的运动矩阵,然后根据父节点的运动矩阵往反方向运动。

比如子节点的运动矩阵是朝x正方向平移10.0f,父节点是朝x正方向平移8.0f的话。
那么子节点实际上是运动了相对于父节点往x正方向2.0f。
这个时候子节点的矩阵就应该为本身的变换矩阵(往x正方向平移10.0f),然后再执行一个父节点的逆矩阵(往x负方向平移8.0f)来得到两个节点之间的相对运动。

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
发表于 2005-3-7 11:13:00 | 显示全部楼层

Re:3d max中Node节点的矩阵变换问题,请教?刚刚名字发错了

因为两矩阵若相等,一个矩阵乘另一矩阵的逆矩阵一定等于单位矩阵,其实和matNodeLocalTM = matNodeLocalTM * Inverse(matNodeParentTM)效果是一样的,只不过考虑到骨骼中有比较多这种相等的矩阵,所以这样做更快点。

8

主题

20

帖子

20

积分

注册会员

Rank: 2

积分
20
 楼主| 发表于 2005-3-7 11:29:00 | 显示全部楼层

Re:3d max中Node节点的矩阵变换问题,请教?刚刚名字发错了

呵呵,多谢各位大侠的指教!

8

主题

111

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2005-3-7 13:52:00 | 显示全部楼层

Re:3d max中Node节点的矩阵变换问题,请教?刚刚名字发错了

matNodeLocalTM = matNodeLocalTM * Inverse(matNodeParentTM);
的目的是取得该子Node在父Node的空间里的相对转换矩阵.这样便于动画的实现.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 17:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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