2016-01-24 42 views
0

我需要爲我的遊戲在3D角色上啓用可見項交換,但對於我的生活,我無法解決如何在Three.js中執行此操作。首先,關於Three.js中骨骼和皮膚如何工作的任何信息都將有所幫助。如何從組件網格組裝一個(蒙皮)模型?

除此之外,我想要做的是基本上每個字符的段都是來自另一個網格的段。例如,小腿可能來自基部/裸體人物模型,短褲模型的上腿,襯衫模特的軀幹和上臂等等。一旦每根骨骼都被填充,然後將它們全部縫合在一起並且動畫爲一體。

如何確定要複製或刪除哪些區域,以及如何將面部拼接在一起?這將如何影響動畫,以及我需要採取哪些步驟來確保一切都同步?

我會假設,假設基礎模型都共享相同的骨骼結構,我可以查找每個骨骼的頂點(和它們的皮膚屬性),並刪除或複製它們以這種方式開始。但是,我似乎無法弄清楚骨骼的頂點關聯是如何存儲的。

回答

1

轉到您的skinnedMeshInstance.geometry,您應該看到.skinIndices.skinWeights.這些是您的骨骼指數和骨骼重量。在skinnedMeshInstance.skeleton之下,您有.bones這是單個骨骼數據。如果您使用的是出口商,那麼https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3也可能會有所幫助。

不幸的是,我不知道如何去做你在ThreeJS中所提出的問題,但總的來說,它是如何將單個網格附件的骨骼骨骼結構解耦的;一個骨架可以有多個網格附件。在模型初始化時,將模型骨骼/皮膚的權重和索引設置爲它所屬骨架的正確對應值,然後在繪製時骨架計算骨骼矩陣並上傳到GPU,然後只需繪製所需的網格附件。

你在追求什麼,我認爲是如何讓多個skinnedMesh共享相同的骨架。有skinnedMesh.bind其中「綁定一個骨架到蒙皮網格。綁定矩陣被保存到.bindMatrix屬性和.bindMatrixInverse得到計算。」 (http://threejs.org/docs/#Reference/Objects/SkinnedMesh)但我不知道這是否會工作。也許要通過ThreeJS文檔來查看是否可以共享骨架,或者可能直接提出另一個問題直接詢問?