3ds max sdk裡的 INode

來源:互聯網
上載者:User

轉載: http://www.winu.cn/thread-78384-1-1.html

MAX SDK的INode的變換矩陣,以及Object的一些常識 發行者:tomore 發布日期:2006-08-31 11:59

 

MAX SDK中,INode是很重要的一個部分。 幾乎所有的東西都需要通過INode來訪問:Mesh Camera等. 下面我來簡單的介紹一下和INode相關的各種不同的TM.(Transformation Matrix).僅僅代表我近日閱讀MAX SDK的一些理解.希望高手指教.新手討論. 首先是介紹一下Node和Object(Mesh TriObject等). MAX裡的Scene是由INode構成的,Node裡包含很多東西.這個Node可能是可以Deform(變形)的,或者是不可以Deform的。如常見的Editable Mesh和Cylinder一類的東西是可以Deform的Node. 而Camera是不可以Deform的。一個包含了幾何物體的Node(就是可以轉化為GeomObject的)中的幾何體並不是Node本身.而是Node中的Object .這個Object 可能是一個Derived Object(表示這個Object從別的Object那裡派生出來,通常是從上一個修改器(Modifier)的結果那裡派生的). 同時還附加了一些Modefier 每個Modifer的修改結果都是一個Deried Object .而類似Pyhsique的修改器都是作用在Derived Object上.因此,要找一個Node有沒有Pyhsique的修改器,需要通過Derived Object來得到. INode->GetObjectRef()可以得到這個物體的Object . Object->SuperClassID() == GEN_DERIVED_CLASS_ID的話,就表示這個Object是一個Derived Object . DerivedObject->GetObjectRef()得到這個這個Derived Object是從那個Object派生出來的.. 用上面三個函數.可以遍曆一個Node從建立到形成這個Node,所有經過的Derived Object. 如果要得到這個Node上最終的Object的狀態(ObjectState.它包含了Node的Object). 只要調用INode->EvalWorldState()就可以了。 下面.我來介紹Node裡容易引起混淆的幾個TM. INode->GetNodeTM().: NodeTM()只包含了Node的TM.不是物體的TM. 每個Node都有個基準點(Pivot Point). 這個Pivot Point在全局座標中的狀態,就是這個Node的TM. 而附加在這個Node上的Object相對這個Pivot Point可能會有其他的變換(平一,旋轉等). 所以.NodeTM不能用來變換Object. INode->GetParentTM(). 父節點的TM.我們說過NodeTM是在全局座標中的。所以,要得到節點相對父節點的TM需要 GetNodeTM()*Inverse(GetParentTM()). INode->GetObjectTM(). 用這個矩陣,可以把Node中的Object變換到世界空間來. 其實GetObjectTM() = NodeTM() * (Object相對於Node的變換). INode->GetObjTMBeforeWSM() : WSM的意思是World Space Modifer. Modifer有兩中,一種是Object Space的。一種是World Space的.如名字所暗示的: World Space Modifier要把Object先變換到世界空間裡來.而不是物體空間中,所以,如果一個Object(Node上的Object)受到過World Space Modifier的影響。那麼它已經變換到全局座標系中來了。GetObjectTM返回的將是單位矩陣(否則,就做了兩次世界變換了). 但是我們想得到把Object變換到世界空間的矩陣,那麼怎麼辦呢?,唯一的辦法就是GetObjTMBeforeWSM(). 它將返回一個等效於沒有WSM的時候的GetObjectTM. INode->GetObjTMAfterWSM() : 本人實在沒有想到這個TM有什麼用途.望高人指教. 以上只是本人的拙見.參考了MAX SDK中的: The Node and Object Offset Transformations Geometry Pipeline System 的兩個部分.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.