下面我来简单的介绍一下和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凌晨
本文介绍了MAX里Scene由INode构成,Node包含多种内容,有可变形和不可变形之分,还阐述了Node中Object的相关概念,如DerivedObject等。同时介绍了Node里几个容易混淆的TM函数,包括GetNodeTM、GetParentTM等,参考了MAXSDK部分内容,希望引发讨论。
4712

被折叠的 条评论
为什么被折叠?



