博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF 3D动态加载模型文件
阅读量:5164 次
发布时间:2019-06-13

本文共 1014 字,大约阅读时间需要 3 分钟。

原文:

这篇文章需要读者对WPF 3D有一个基本了解,至少看过官方的。

一般来说关于WPF使用3D的例子,都是下面的流程:

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

2.程序然后打开Blender,将obj拖动到Blender中,生成xaml代码

 

但是这样做会有至少两个问题:

1. 维护麻烦,因为一旦模型修改,你需要重复上面的步骤,至少要修改xaml的代码。

2. 只能使用原生的ModelVisual3D,这会导致模型扩展的困难,具体见。

 

所以最好还是动态读取obj文件,我这里使用的是一个网上别人写的WavefrontObjLoader。

代码比较复杂,基本思路就是打开文件,解析obj格式,生成ModelVisual3D。

 

类的入口是下面这个方法,传入文件名 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 { 
get
set; }
     
public 
object Tag { 
get
set; }
 }

 

2. 原来的代码第150行是没有clone的,直接赋值=,这样会导致模型的一个部分材质变了,其他的也跟着变。

 

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

 

 

 

posted on
2018-10-22 10:06 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/9828619.html

你可能感兴趣的文章
人生得以遇见
查看>>
让 .gitignore 文件生效
查看>>
Daily Scrum 2012/11/30
查看>>
用Python3实现的Mycin专家系统简单实例
查看>>
TortoiseSVN tutorial
查看>>
jvm死锁解决
查看>>
bcdiv bcmul
查看>>
winsock 服务器代码(不建议win服务器listen防火墙会禁止外部访问的)
查看>>
无限滑动
查看>>
阿里云产品术语和docker
查看>>
干货100+ 最超全的web开发工具和资源大集合
查看>>
事件DOMContentLoaded和load的区别
查看>>
repeater灵活运用、repeater的commmand用法、如何不用repeater展示数据
查看>>
MySQL计算销售员昨日各指标综合得分_20161206
查看>>
Django ORM 多表操作
查看>>
centos6.5下使用yum完美搭建LNMP环境(php5.6) 无脑安装
查看>>
linux中的 tar命令的 -C 参数,以及其它一些参数(转)
查看>>
BZOJ 1572 [Usaco2009 Open]工作安排Job:贪心 + 优先队列【先放再更新】
查看>>
APN 推送
查看>>
Python的垃圾回收机制
查看>>