zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    文档翻译第002篇:Process Monitor帮助文档(Part 2)
    Hexo-设置阅读全文
    hexo 添加标签
    防御暴力破解SSH攻击
    Hexo NexT主题添加点击爱心效果
    【干货】2个小时教你hexo博客添加评论、打赏、RSS等功能 (转)
    svn命令在linux下的使用
    hexo 配置文件 实例
    Hexo安装配置详解
    markdown编辑
  • 原文地址:https://www.cnblogs.com/enjoyeclipse/p/2410439.html
Copyright © 2011-2022 走看看