游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5377|回复: 12

关于3DMA插件INode中几个矩阵的问题

[复制链接]

17

主题

51

帖子

51

积分

注册会员

Rank: 2

积分
51
发表于 2005-6-15 22:11:00 | 显示全部楼层 |阅读模式
最近在研究3DMAX的插件.
1、对于下面的这3个函数不太明白它们的区别与联系,看了SDK以后还是有疑问,所以请达人解答
GetObjectTM
GetObjTMAfterWSM
GetObjTMBeforeWSM

2、对于骨骼系统,我研究的代码中有的代码是这样做的:
mat1 = GetObjectTM
mat2 = Invers(GetObjTMAfterWSM)  -- 即GetObjTMAfterWSM得逆矩阵
然后mat1*mat2设给Transform

但是我认为应该是offsetMat * parentMat才对啊。不知道这中间有什么联系?


谢谢。

17

主题

51

帖子

51

积分

注册会员

Rank: 2

积分
51
 楼主| 发表于 2005-6-15 22:35:00 | 显示全部楼层

Re:关于3DMA插件INode中几个矩阵的问题

不好意思,还差一个矩阵:GetNodeTM

希望达人能够解我心中疑问。谢谢,谢谢

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2005-6-16 10:09:00 | 显示全部楼层

Re:关于3DMA插件INode中几个矩阵的问题

偶用的是Max的IGame的接口写的。我觉得这三个函数可能是不同坐标系下面的,本地坐标系和世界坐标系,本地坐标系绑定在对应Object上。这是偶的猜想。

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2005-6-16 10:12:00 | 显示全部楼层

Re:关于3DMA插件INode中几个矩阵的问题

GetObjectTM 是Node的TM乘上Object相对Node的TM,也就是把Object变化到世界坐标中的TM
GetObjTMAfterWSM,是施加完WSM(比如Ripple Modifer)后的TM,它也是把物体从局部坐标系中变化到世界坐标中.

我不知道你说的那个Transform是什么,我理解如果你要去相对父节点的Tranform的话,应该是
GetObjectTM() * invers(GetParentNodeTM()).
如果要取得物体在世界坐标中的Transform,应该直接取GetObjectTM的trans就可以了。
当然你的物体上不应该有WSM

17

主题

51

帖子

51

积分

注册会员

Rank: 2

积分
51
 楼主| 发表于 2005-6-16 10:47:00 | 显示全部楼层

Re:关于3DMA插件INode中几个矩阵的问题

恩。谢谢xpertsoft的支持,昨天晚上我想了一晚上基本上明白了大体意思(虽然还有点不明白)

我现在想得到相对父节点的Tranform,即:_offsetMatrix.
我也是这样得到的:Matrix3 :_offsetMatrix = GetObjectTM() * invers(GetParentNodeTM()),但是如果输出出来到D3DXMATRIX中,应该还需要做什么变换?因为我想把输出模型还原到基本形式,但是我直接用这个结果,整个模型都乱套了。

17

主题

51

帖子

51

积分

注册会员

Rank: 2

积分
51
 楼主| 发表于 2005-6-16 10:50:00 | 显示全部楼层

Re:关于3DMA插件INode中几个矩阵的问题

To:nocture
嘿嘿,我也是用IGame接口写的,不过这里实在是有错误,而且除了dx9d里面的sample外没有其他的一个例子,没办法我才直接得到INode,然后用这几个矩阵来做。
当然我没有用dx那套存数据的方法,所以不知道它内部怎么转换的。

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2005-6-16 12:33:00 | 显示全部楼层

Re:关于3DMA插件INode中几个矩阵的问题

有什么错误?我到出骨骼动画很好啊。

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2005-6-16 12:39:00 | 显示全部楼层

Re:关于3DMA插件INode中几个矩阵的问题

Igame接口中的GetObjectTM都是相对于第1帧动画的直接变换矩阵,比如第一帧手臂的位置是(0,0,0),第二帧手臂到了(X,Y,Z),那么GetObjectTM得到的是
[ ....
  ....
  ....
  X,Y,Z,0]
所以骨骼级连偶是最后再根据ParentBoneID一个个转换出来的

17

主题

51

帖子

51

积分

注册会员

Rank: 2

积分
51
 楼主| 发表于 2005-6-17 09:42:00 | 显示全部楼层

Re:关于3DMA插件INode中几个矩阵的问题

恩,谢谢nocture的提示,我今天试试。

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-6-17 19:05:00 | 显示全部楼层

Re:关于3DMA插件INode中几个矩阵的问题

         Matrix3 tm,matParentTM;
      tm = pBone->GetNodeTM( t);
            if (pBone->GetParentNode() == NULL){}
            else
            {
                pBone->GetParentNode()->EvalWorldState( t);
                matParentTM = pBone->GetParentNode()->GetNodeTM( t);
                if( tm == matParentTM )
                {
                    tm.IdentityMatrix();
                }else
                {
                    tm =tm *
                   Inverse(matParentTM);
                }
            }

当我导出时,第一根骨骼就出错了,顶点乘以它会以Y轴为轴镜像到另一边,这是什么问题?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-26 02:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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