3DMax模型输入到WPF中运行
其实看看笔者文章之前,可以在网上搜索下将3Dmax模型输入到WPF的办法,大部分结果都是这篇文章。这篇文章呢?有点麻烦,就是我们3Dmax模型转换到Blend的时候只有模型没有材质及贴图,需要在Blend3中自己添加材质贴图。模型简单在Blend添加是OK的,复杂点的话,那就麻烦了,笔者想还不直接用Blend建模型呢!还有一点笔者觉得用按钮控制飞机太麻烦了,可以用鼠标控制飞机啊。所以本篇主要是围绕这两点而写的。
本篇的例子下载(开发环境:3ds Max 9.0,Microsoft Expression Blend 3,VS 2010)
本文3DMax模型直接引用WXWinter,但是在3Dmax中我直接给飞机提供了材质贴图(文件:helicopter.max)。打开3Dmax模型,点击文件==>导出==>保存类型(选择.Obj).然后按下图设置好,点击OK即可。

得到了两个文件(.obj和.mtl)
然后得到打开Microsoft Expression Blend 3,创建一个新的WPF程序,并在程序中,选择project==>Add Existion Item(选中上面得到的两个文件以及飞机的材质贴图a.jpg和b.jpg),将它们都加入到工程中来,然后在工程中双击.obj文件,飞机就会自动显示在MainWindow窗口,这里可以调整模型的大小等等。那么这样就成功生成了将3Dmax模型数据转换为了Xaml格式的数据了。

在用vs打开刚才Blend创建的工程,由于笔者用的是vs2010,所以会有代码转换的问题。转换完代码后双击MainWindow.Xaml文件,那么就可以看到3Dmax飞机模型成功输入到了WPF中了。
相信下面的就简单了再Gird中添加鼠标事件(MouseWheel,MouseLeftButtonDown,MouseLeftButtonUp等等)。然后就是对3D物体的具体操作,Viewport3D里面包含了3D的内容,Viewport3D.Camera这个是就像个摄像机将3D的物体以2D形式展现出来,就像大家看电视,拍的是真3维,其实展示就是一个2D平面。这个属性很重要,它的Position属性,LookDirection属性,UpDirection属性直接影响到观看到的3D内容的呈现。这里可以滚动鼠标中间的按钮触发MouseWheel事件,变动摄像机位置,朝LookDirection方向前进,这样给人感觉物体越来越大或者越来越小。
本例对飞机的操作,滚动滑轮式前进或者后退,按住左键并移动鼠标是向左走,向右走,按住右键移动鼠标是旋转飞机。


3DMax模型输入到WPF中运行的更多相关文章
- WPF中运行时使内容可以上下左右被鼠标拖动应该怎么做?
<Window x:Class="testGridSplitter.MainWindow" xmlns="http://schemas.microsoft.com/ ...
- Eclipse中输入系统变量和运行参数
在开发时,有时候可能需要根据不同的环境设置不同的系统参数,我们都知道,在使用java -jar命令时可以使用-D参数来设置运行时的系统变量,同样,在Eclipse中运行java程序时,我们怎么设置该系 ...
- Eclipse中输入系统变量和运行参数--转
原文地址:http://chenzhou123520.iteye.com/blog/1931670 在开发时,有时候可能需要根据不同的环境设置不同的系统参数,我们都知道,在使用java -jar命令时 ...
- WPF中,输入完密码回车提交 ,回车触发按钮点击事件
类似与winform中窗体的AcceptButton属性,在wpf中,需要将按钮的IsDefault设置为true就行.
- WPF中的三维空间(2)
原文:WPF中的三维空间(2) 2.10.3 三维对象操作 1.在二维平面空间移动.缩放.旋转Viewport3D控件对象 图2-196 选中Viewport3D控件对象 图 ...
- WPF 中的 Pack URI地(资源文件加载)
参考资源网http://msdn.microsoft.com/zh-cn/library/aa970069.aspx#Absolute_vs_Relative_Pack_URIs 在 Windows ...
- WPF中的URI
在 Windows Presentation Foundation (WPF) 中,使用统一资源标识符 (URI) 标识和加载文件的方式有很多,包括: 指定当应用程序第一次启动时显示的用户界面 (UI ...
- 在 WPF 中的线程
线程处理使程序能够执行并发处理,以便它可以做多个操作一次.节省开发人员从线程处理困难的方式,设计了 WPF (窗口演示文稿基金会).这篇文章可以帮助理解线程在 WPF 中的正确用法. WPF 内部线程 ...
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
随机推荐
- [TypeStyle] Reusable styles using TypeStyle mixins
TypeStyle’s style function allows you to give multiple objects as an argument. This provides a simpl ...
- 使用ng-content进行组件内容投射
原文 https://www.jianshu.com/p/c0a39b1776c0 大纲 1.认识内容投射 2.一个简单组件 3.简单投射 4.针对性投射 5.ngProjectAs 6.代码资源 认 ...
- cocos2d-html5 javascript 通过C++绑定,调用java方法
1.java中的写法 /* * XConnectPlugin.java * * Created on: 2014年4月30日 * Author: lswdonald9@gmail.com */ pac ...
- dmalloc arm-linux平台使用
话说“工欲善其事,必先得其器”,用C语言写程序,最怕遇到个什么内存泄漏,内存越界访问了,心里那个急啊... 如果在i368-linlux上,valgrind工具是首选,但在arm-linux平台上,如 ...
- bash - Logical_OR
转载 https://bash.cyberciti.biz/guide/Logical_OR Logical OR ← Logical AND Home Logical Not ! → Logic ...
- 标准模板库(STL) map —— 初始化问题
map 容器没有:.reverse成员: map 是关联式容器,会根据元素的键值自动排序: map 容器不是连续的线性空间: 标准 STL 使用 RB-tree 为底层机制 ⇒ 自动排序(关于键值): ...
- QueryRunner类常用的方法
public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLEx ...
- 【u009】瑞瑞的木板
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 瑞瑞想要亲自修复在他的一个小牧场周围的围栏.他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每 ...
- [RxJS] Use groupBy in real RxJS applications
This lesson will show when to apply groupBy in the real world. This RxJS operator is best suited whe ...
- C# 关于反射事件
在frmMain类中的代码 private void StartRun(string tag, string date, bool tipType) { var d ...