MAX SDK的INode的变换矩阵,以及Object的一些常识

本文介绍了MAX里Scene由INode构成,Node包含多种内容,有可变形和不可变形之分,还阐述了Node中Object的相关概念,如DerivedObject等。同时介绍了Node里几个容易混淆的TM函数,包括GetNodeTM、GetParentTM等,参考了MAXSDK部分内容,希望引发讨论。
MAXSDK中,INode是很重要的一个部分。几乎所有的东西都需要通过INode来访问:MeshCamera等.
下面我来简单的介绍一下和INode相关的各种不同的TM.(TransformationMatrix).仅仅代表我近日阅读MAXSDK的一些理解.希望高手指教.新手讨论.

首先是介绍一下Node和Object(MeshTriObject等).
MAX里的Scene是由INode构成的,Node里包含很多东西.这个Node可能是可以Deform(变形)的,或者是不可以Deform的。如常见的EditableMesh和Cylinder一类的东西是可以Deform的Node.而Camera是不可以Deform的。
一个包含了几何物体的Node(就是可以转化为GeomObject的)中的几何体并不是Node本身.而是Node中的Object.这个Object可能是一个DerivedObject(表示这个Object从别的Object那里派生出来,通常是从上一个修改器(Modifier)的结果那里派生的).同时还附加了一些Modefier每个Modifer的修改结果都是一个DeriedObject.而类似Pyhsique的修改器都是作用在DerivedObject上.因此,要找一个Node有没有Pyhsique的修改器,需要通过DerivedObject来得到.
INode->GetObjectRef()可以得到这个物体的Object.
Object->SuperClassID()==GEN_DERIVED_CLASS_ID的话,就表示这个Object是一个DerivedObject.
DerivedObject->GetObjectRef()得到这个这个DerivedObject是从那个Object派生出来的..

用上面三个函数.可以遍历一个Node从创建到形成这个Node,所有经过的DerivedObject.

如果要得到这个Node上最终的Object的状态(ObjectState.它包含了Node的Object).只要调用INode->EvalWorldState()就可以了。

下面.我来介绍Node里容易引起混淆的几个TM.
INode->GetNodeTM().:NodeTM()只包含了Node的TM.不是物体的TM.每个Node都有个基准点(PivotPoint).这个PivotPoint在世界坐标中的状态,就是这个Node的TM.而附加在这个Node上的Object相对这个PivotPoint可能会有其他的变换(平一,旋转等).所以.NodeTM不能用来变换Object.

INode->GetParentTM().父节点的TM.我们说过NodeTM是在世界坐标中的。所以,要得到节点相对父节点的TM需要GetNodeTM()*Inverse(GetParentTM()).

INode->GetObjectTM().用这个矩阵,可以把Node中的Object变换到世界空间来.
其实GetObjectTM()=NodeTM()*(Object相对于Node的变换).

INode->GetObjTMAfterWSM():WSM的意思是WorldSpaceModifer.Modifer有两中,一种是ObjectSpace的。一种是WorldSpace的.如名字所暗示的:WorldSpaceModifier要把Object先变换到世界空间里来.而不是物体空间中,所以,如果一个Object(Node上的Object)受到过WorldSpaceModifier的影响。我们在EvalWorldState()的时候已经把顶点变换到世界坐标系中来了。GetObjectTM返回的将是把Object从INode的局部坐标系变换到世界坐标系的矩阵, 如果把ObjectTM乘上得到的顶点(经过WSM后,顶点已经在世界空间中了),就做了两次世界变换了,所以我们需要得到Node的一个矩阵,这个矩阵是表示能把经过WSM变换后的顶点正确的变换到世界空间中来. 这个矩阵就是GetObjTMAfterWSM().如果一个INode上没有WSM. 那么GetObjTMAfterWSM()和GetObjectTM是相同的.同样,它和GetObjTMBeforeWSM也是相同的。

INode->GetObjTMBeforeWSM():这个函数的到WSM施加在INode前的ObjectTM.即这个INode不包括WSM时候,把它的Object的顶点变换到世界坐标系中的变换矩阵..


以上只是本人的拙见.参考了MAXSDK中的:
TheNodeandObjectOffsetTransformations
GeometryPipelineSystem
的两个部分.

发表在这里,希望能让MAXSDK中的东西也能引起大家注意.多多讨论.
MAXSDK里有很多没有天理的东西.希望大家也能商量点天理出来

xheartblue2005-1-6凌晨

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值