WPF 3D動態加載模型文件


這篇文章需要讀者對WPF 3D有一個基本了解,至少看過官方的MSDN例子

一般來說關於WPF使用3D的例子,都是下面的流程:

1.美工用3DMAX做好模型,生成一個obj文件

2.程序然后打開Blender,將obj拖動到Blender中,生成xaml代碼

 

但是這樣做會有至少兩個問題:

1. 維護麻煩,因為一旦模型修改,你需要重復上面的步驟,至少要修改xaml的代碼。

2. 只能使用原生的ModelVisual3D,這會導致模型擴展的困難,具體見這篇文章

 

所以最好還是動態讀取obj文件,我這里使用的是一個網上別人寫的WavefrontObjLoader。

代碼比較復雜,基本思路就是打開文件,解析obj格式,生成ModelVisual3D。

 /Files/enjoyeclipse/WavefrontObjLoader.zip


類的入口是下面這個方法,傳入文件名 xxx.obj, 返回一個ModelVisual3D。

public ModelVisual3DWithName LoadObjFile(string targetFile)

 

但是我對源文件進行了些修改,一個是滿足我的業務需要,一個是修正了一個bug:

1.將ModelVisual3D改成了ModelVisual3DWithName,這樣我就可以在解析obj文件之后,給ModelVisual3D加上Name和Tag了,方便維護。(原生的ModelVisual3D是沒有的,非常麻煩)。同時有一個private Dictionary<string, ModelVisual3DWithName> dictionaries方便根據名字查找其中的某個模型。

 [ContentProperty("Children")]

  public  class ModelVisual3DWithName : ModelVisual3D
 {
      public  string Name {  getset; }

      public  object Tag {  getset; }
 }

 

2. 原來的代碼第150行是沒有clone的,直接賦值=,這樣會導致模型的一個部分材質變了,其他的也跟着變。

 

modeld.Material = geometry.Material.Clone();

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM