wpf--3dmax+blend+wpf综合运用

lonelyxmas lonelyxmas     2022-12-27     801

关键词:

原文:WPF--3Dmax+blend+WPF综合运用

引自:http://blog.sina.com.cn/s/blog_95dbdf9e0100we3z.html

 

本人小菜,WPF刚入门,只是写一下最近的项目心得。欢迎各位前辈们前来拍砖指正,感激不敬!先申明,小弟我入门仓促,很多东西也是一知半解,所以很多问题甚至是不求甚解,所以大神们就直接绕路算了。

总结一:3D max+blend+WPF综合运用

开发环境:

Autodesk 3ds Max Design 2012

Micosoft Expression Blend 4 ,

Microsoft Visual Studio 2010

    小弟之前参加一个项目,得用到WPF3D编程,但是WPF的3D只有最基本的3D场景元素,比如摄像机,光照等。如果想要在WPF中画一个正方体或者球 体,都得自己一步一步的把每个网格点的坐标算好,三角网格的顶点顺序添加好,设置法向量,贴图的话也得自己指定好对应的顶点坐标。画个简单的模型都如此麻 烦了,稍微复杂点的模型,只能依赖第三方建模软件来构建模型,然后把模型转换成松散的XAML文件,才能导入到WPF中去,或者把模型的相应XAML代码 直接嵌入到程序中去。

    工欲善其事必先利其器,下面是我找到的相关工具和相关示例,有些我自己也没用过:

1.  3D Max Studio有导出XAML的插件:http://max2xaml.codeplex.com/ 

2. 还有开源的Blender: http://www.blender.org/ 以及相应的导出XAML的插件:

http://xamlexporter.codeplex.com/  

3. 还有Viewer3ds-3ds to xaml converter: http://www.wpf-graphics.com/Viewer3ds.aspx

4. WPF(c#)有专门的3D建模工具,使用起来和3DMax差不多,制作完成后可直接导出XAML语言方便快捷:ZAM 3D : http://www.erain.com/products/zam3d/DefaultPDC.asp

示例:

1.WPF加载obj格式的3D模型:http://www.pin5i.com/showtopic-26486.html  

2.3ds Max建模,Blend设计,VS2008控制WPF的3D模型例

http://www.cnblogs.com/foundation/archive/2008/05/23/1205892.html

http://www.cnblogs.com/couhujia/archive/2010/07/28/1787103.html

http://zhouwenqi.com/blog/board_33.html

 

    现在网上可以下载到很多绚丽逼真的3D模型,模型有很多格式,我们这次之所以选择了.Max格式,因为网上很多模型(尤其是游戏角色原型)都是.max格式,其他的格式大多都可以在3Dmax中打开,然后再保存为.max格式。

    小弟的3Dmax门都没入,项目做到一半恨不得马上找一个传设的女友帮我建模做美工,无奈之下,去图书馆速度借了2本3Dmax的书,需要的时候啃两下,因此只掌握了最基本的模型导入,导出和修改合成的功能。

    下面以一个游戏角色原型(诛仙中的某个武士)为例,这个原型是在网上下载的,具体网址是我忘记了。在3Dmax中打开这个模型后,可以随心所欲的修改,肢解,或合体。

     提醒:打开模型时如何文件单位比例和系统单位比例不匹配时,就会弹出以下的对话框让你选 择。选择哪个都无所谓,按自己的需要选择吧!但如果两者比例相差太大,比如下面的系统单位比例是1单位=1cm,而文件单位比例是1单位=1m,如果按系 统单位打开的话,模型可能在3dmax视图中过大,没能在3Dmax视图中显示出来或者只显示模型的局部,这时选择右下角这个按钮(技术分享图片) 就可以最大化显示选定对象。
技术分享图片

技术分享图片

技术分享图片
选择保存类型为obj格式,然后给文件命名为man1,再点击保存,就会有如下“OBJ导出选项”的对话框:

 

技术分享图片技术分享图片
单纯的obj格式是不带贴图的,想要把贴图一同导出的话得勾选材质选项的“导出材质”“创建材质库”,同时点击“材质导出”按钮,就会弹出“OBJ Map-Export选项”对话框,在这里可以选择图片保存的格式和大小。然后选择“导出”,obj,mtl和相应的贴图图片文件就会在3dmax的export文件夹下,贴图信息存放到.mtl,具体的贴图则存放到Maps文件夹下。

提醒:导出时如果出现“缺少贴图”的对话框,得“手动搜索路径”,如果跳过的话只会有mtl和obj文件,而不会有具体的贴图文件。搜索路径一般为原模型的所在的路径,因为.dds格式的文件一般都和.max模型文件一起。

技术分享图片

然后打开Blend 4,新建项目->WPF应用程序,单击确定。

技术分享图片
选择“项目”->“添加现有项”,出现下面对话框,把man1.mtl和man1.obj两个文件添加到项目中去。此时,双击man1.obj文件 就可以把不含贴图的模型载入到当前工程中。拖拽右下角的正方形边框可以控制模型大小,一般情况下就可以看到不带贴图的模型了,大多都是光秃秃的单调灰白 色。

 技术分享图片
但是为什么我这里什么也看不见呢?仔细看看,Blend确实已经载入模型了(如下图):

 技术分享图片
只不过我遇到稍微特殊情况,不是看不到,是因为“漫射材料”的“纹理画笔”或者“漫射颜色”设为透明了。稍微修改一下就可以看到模型了,比如我这里修改裤子模型的“漫射材料”的“纹理画笔”和“漫射颜色”的A值设为100%,即不透明,就可以看到单调的灰色模型。

 技术分享图片
但这样的模型肯定没有漂亮的贴图,只有单调颜色,所以需要我们自己加载相应的贴图。当时我很郁闷,因为Blend4的用户指南上说了“在导入三维对象(.obj 文件)时,同时导入任何相关的材料文件 (.mtl) 以及材料文件中使用的所有图像文件很重要。如果丢失了任何图像文件,以后将无法添加这些文件”。因此看来是我没导入图片文件的缘故,于是马 上“添加现有项”,把四个贴图文件加载到项目中,依然看不到带贴图的模型,在这里郁闷良久,找不到解决的方法,只得自己手动为每个模型加载贴图了。这其实 是一条远路,近路后来发现了,后面会介绍。比如为头部添加纹理图片,效果如下:

技术分享图片
全部添加完成之后,运行程序,如下:

 

技术分享图片技术分享图片

 在Blend中还可以对模型进行基本的调整,诸如放缩,旋转,平移等操作。

技术分享图片

然而依然有不足之处,贴图细节处依然有问题。比如Blend中的模型背面和3Dmax元模型的背面差别如下:估计是因为贴图坐标不对应造成的,用 3Dmax导出的图片直接在Blend里贴的话,达不到原来的效果。或者说目前我们做不到,可能美工大神们做得到。这些应该属于美工那边的。哎。

 技术分享图片技术分享图片
然后可以用VS2010打开Blend4中所创建的WPF项目,可以在VS2010中继续添加相应的交互界面和控制按钮,这里就不唠叨了,自己啃书去吧!

 继续纠结用户指南中的“在导入三维对象(.obj 文件)时,同时导入任何相关的材料文件 (.mtl) 以及材料文件中使用的所有图像文件很重要。如果丢失了任何图像文件,以后将无法添加这些文件”这句话的深意,我猜测是贴图路径问题,贴图的信息是由3Dmax导出的,且存在mtl格式文件中,后来打开mtl文件,才发现贴图文件前面都有一个maps文件路径(如下),果然如此。

技术分享图片

于是赶紧在项目中新建一个maps文件夹,然后把贴图加载到这个文件夹下,再双击obj文件,这时Blend就自动帮咱们贴图了。但是缺陷依然存在,和之 前提到的不足之处一摸一样,背面的贴图自动贴的和手动贴的效果一样,效果和原始3Dmax模型还是有一些差别的,这已经超出IT码农范畴了,去找个美工妹 子吧!

技术分享图片

 

总结二:WPF载入松散的XAML模型

我们的项目需要把3Dmax模型载入到WPF中,主要涉及模型的存放、导入和控制。

首先是模型的存放问题。前面用3Dmax模型在Blend中设计,之后用VS2010打开这个项目后,会发现模型对应的相应的xaml代码已经嵌入到程序 中了。如果多个模型怎么办?不可能把每个模型对应的xaml代码敲入到程序中,这样既不美观也不利于后面的模型各自控制。

于是得把模型的xaml代码抠出来,放到txt中,再重命名为xaml格式,就是一个松散的xaml模型文件了。

其次是模型的导入。存放到xaml文件中的模型如何导入到wpf中,主要通过文件流FileStream打开,然后用XamlReader加载,根据不同 的模型类型加载到不同类型的变量里。一般松散的xaml模型类型有GeometryModel3D,Model3Dgroup等,看自己的需要去转换。

public void LoadModel(ref GeometryModel3D _model, string path)

     if (path != null && File.Exists(path))

    

         using (FileStream file = File.OpenRead(path))

        

              _model = (GeometryModel3D)XamlReader.Load(file);//

        

    

 

 public void LoadModel(ref Model3DGroup _model, string path)

     if (path != null && File.Exists(path))

    

          using (FileStream file = File.OpenRead(path))

         

             _model = (Model3DGroup)XamlReader.Load(file);

           

     

 

最后是模型的控制,如何根据Kinect中提供的肢体数据实时变换模型姿势,我们只是把衣服切成一块块生硬地挂在骨骼节点上,没有考虑一切物理效应,诸如 重力,碰撞检测,骨骼蒙皮等效果。因为WPF的3D功能没那么强大,除非得借助其他的游戏引擎才行,或者自己从底层编写,当时时间紧迫,只能生硬地把模型 切割,再分块贴上去。Kinect的骨骼数据提供的XYZ空间坐标方位,那么2个骨骼点间连线的角度和方向都很容易计算,然后把模型通过一系列的平移,旋 转,放缩变化放到相应的骨骼点上。

为了达到增强现实的效果,在WPF界面中,Viewport3D和显示原始视屏流Image控件的大小一摸一样,位置完全重合。然后把Camera放在空 间坐标系坐标零点,这样Camera就和真实空间中的Kinect传感器的位置,朝向一致了。所以,Viewport3D中的虚拟效果正好可以覆盖在底层 视屏中的人身上,达到增强现实的效果。但是会有小小的偏差,源于Kinect骨骼数据不是很精确,所以还需要自己手动修正一些细节,从而让效果更真实点。


















blend无法打开wpf

在vs2010中创建wpf项目,用BlendPreviewforSilverlight5打开时提示框架不支持,请问怎么解决?什么版本的blend支持wpf?blend4支持wpf,BlendPreviewforSilverlight5是不支持wpf的参考技术A我这里有ExpressionStudioUltimate4,Blend支持Silverlight3、4、5。http://y... 查看详情

wpf界面必须用blend做吗

当然不是。只是用blend更直观更快捷。但如果碰到控件模板的修改就一定要用blend了。参考技术A代码熟练也可以手写,Blend是做细节样式比较直观的辅助工具 参考技术B不是啊,只要能生成XAML就行,不过要看到很好的效果用BLEND不... 查看详情

Blend 5(预览版)缺少 WPF 的平台/分辨率选项卡?

】Blend5(预览版)缺少WPF的平台/分辨率选项卡?【英文标题】:Blend5(preview)missingPlatform/resolutiontabforWPF?【发布时间】:2013-03-1212:27:16【问题描述】:在ExpressionBlendforVisualStudio中开发WPF应用程序,我读到Blend现在能够模拟不同的分... 查看详情

wpf和expressionblend开发实例:充分利用blend实现一个探照灯的效果

原文:WPF和ExpressionBlend开发实例:充分利用Blend实现一个探照灯的效果本篇文章阅读的基础是在读者对于WPF有一定的了解并且有WPF相关的编码经验,对于Blend的界面布局有基础的知识.文章中对于相应的在Blend中的操作进行演示,并不会... 查看详情

使用blend设计出符合效果的wpf界面(代码片段)

原文:使用Blend设计出符合效果的WPF界面之前不会用blend,感觉好难的,但美工给出的效果自己有没办法实现,所以研究了一下blend,感觉没有想象中的那么难废话不多说,开始界面设计今天拿到美工给的一个界面效果图这个界面... 查看详情

是否可以使用 VS 2012 自带的 blend 来做 WPF 4?

】是否可以使用VS2012自带的blend来做WPF4?【英文标题】:IsitpossibletouseblendthatcomeswithVS2012todoWPF4?【发布时间】:2014-08-1210:17:21【问题描述】:VisualStudio2012Ultimate带有blend。目前我正在使用VisualStudio2010。但我从朋友那里得到了一份V... 查看详情

3dsmax建模,blend设计,vs2008控制wpf的3d模型例子

原文:3dsMax建模,Blend设计,VS2008控制WPF的3D模型例子3dsMax建模,Blend设计,VS2008控制WPF的3D模型例子 所用的软件3dsMax9.0,MicrosoftExpressionBlend,VS2008例子下载例子:http://files.cnblogs.com/wxwinter/wxd_wpf_3d.rar例子中的文件说明  应用场景在 查看详情

WPF 项目缺少“在 Expression Blend 中打开...”

】WPF项目缺少“在ExpressionBlend中打开...”【英文标题】:"OpeninExpressionBlend..."missingforWPFprojects【发布时间】:2010-12-2715:34:34【问题描述】:我遇到了问题。当我创建一个WPF项目并希望看到“在表达式混合”-它不像Silverlight... 查看详情

使用blend设计出符合效果的wpf界面

之前不会用blend,感觉好难的,但美工给出的效果自己有没办法实现,所以研究了一下blend,感觉没有想象中的那么难废话不多说,开始界面设计今天拿到美工给的一个界面效果图这个界面说实话,还可以吧,勉强说得过去。拿... 查看详情

blend做的wpf程序有问题

我用blend3和vs2008一起做的一个程序,在我的电脑上可以运行。我用的win7系统。同样在一个同学电脑上也可以运行,他的电脑上安装的是xp系统,同时也装有vs2008和blend3。但是在其他电脑上(没有blend3,有vs2008)不论什么系统都没... 查看详情

WPF 应用程序:Visual Studio 与 Expression Blend

】WPF应用程序:VisualStudio与ExpressionBlend【英文标题】:WPFApplications:VisualStudiovs.ExpressionBlend【发布时间】:2010-07-3004:03:55【问题描述】:我对VisualStudio2010和ExpressionBlend4如何一起运行感到有些困惑。如果我想创建一个WPF应用程序,... 查看详情

尝试在 Visual Studio 2010 中创建的 Expression-Blend 4 中打开 WPF 项目时出现问题

】尝试在VisualStudio2010中创建的Expression-Blend4中打开WPF项目时出现问题【英文标题】:TroublewhentryingtoopenWPFprojectinExpression-Blend4,whichwascreatedinVisualStudio2010【发布时间】:2011-07-2112:02:33【问题描述】:我在VS2010中创建我的WPF项目。在... 查看详情

如何使用 Expression Blend 在 WPF 中编辑 DatePicker 的水印

】如何使用ExpressionBlend在WPF中编辑DatePicker的水印【英文标题】:HowdoieditthewatermarkforaDatePickerinWPFusingExpressionBlend【发布时间】:2014-08-1504:49:13【问题描述】:我使用DatePicker创建了一个简单的ExpressionBlend4项目。我编辑了DatePicker的... 查看详情

blend2015中缺少状态转换效果(代码片段)

在我看过的所有视频中,Blend中应该有一个fx按钮,允许在不同类型的过渡效果之间进行切换。问题很简单,在哪里?我需要做一些特殊的事情才能在Blend中启用它吗?请看下面的屏幕截图。我用红色绘制fx的地方应该有一个fx按... 查看详情

vs2010和blend4都装好了,我怎么将blend4画的东西移植到我的vs2010wpf应用程序中呢,请高手指点,谢谢

不用移植啊。你用vs还有blend打开同一个工程。并行处理代码。blend设计前台比较方便,最主要的是创建和编辑动画及behaiour都超方便。用到以上操作的时候直接在blend编辑就行啦,要编辑后台逻辑的时候再使用vs环境就行了。参考... 查看详情

3dmax模型输入到wpf中运行

原文:3DMax模型输入到WPF中运行  其实看看笔者文章之前,可以在网上搜索下将3Dmax模型输入到WPF的办法,大部分结果都是这篇文章。这篇文章呢?有点麻烦,就是我们3Dmax模型转换到Blend的时候只有模型没有材质及贴图,需要在... 查看详情

Blend 2015 - 几个问题

】Blend2015-几个问题【英文标题】:Blend2015-couplequestions【发布时间】:2015-10-2309:37:51【问题描述】:对下面的VisualStudioBlend工具有一些疑问:我可以使用Blend为Windows窗体应用程序准备窗口还是只为wpf应用程序准备窗口?如果第1点... 查看详情

在 Wpf 中使用外部实时渲染器和 Blend for VS

】在Wpf中使用外部实时渲染器和BlendforVS【英文标题】:UsinganexternalrealtimerendererinWpfwithBlendforVS【发布时间】:2017-02-2218:19:40【问题描述】:我计划制作一个项目,用户可以在其中实时查看所选项目并旋转它们。我希望有经验的人... 查看详情