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

本文共 984 字,大约阅读时间需要 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();

 

 

 

转载于:https://www.cnblogs.com/enjoyeclipse/archive/2012/03/21/2410439.html

你可能感兴趣的文章
[LeetCode] Merge Intervals
查看>>
Struts2 学习小结
查看>>
在 Linux 系统中安装Load Generator ,并在windows 调用
查看>>
chm文件打开,有目录无内容
查看>>
whereis、find、which、locate的区别
查看>>
一点不懂到小白的linux系统运维经历分享
查看>>
桌面支持--打不开网页上的pdf附件解决办法(ie-tools-compatibility)
查看>>
nagios监控windows 改了NSclient++默认端口 注意事项
查看>>
干货 | JAVA代码引起的NATIVE野指针问题(上)
查看>>
POI getDataFormat() 格式对照
查看>>
好的产品原型具有哪些特点?
查看>>
实现java导出文件弹出下载框让用户选择路径
查看>>
刨根问底--技术--jsoup登陆网站
查看>>
OSChina 五一劳动节乱弹 ——女孩子晚上不要出门,发生了这样的事情
查看>>
Spring--通过注解来配置bean
查看>>
pandas 十分钟入门
查看>>
nginx rewrite
查看>>
前端安全系列(一):如何防止XSS攻击?
查看>>
查看Linux并发连接数
查看>>
你是谁不重要,关键是你跟谁!
查看>>