WPF 3D编程介绍

原文: WPF 3D编程介绍

上一篇文章简单的介绍了WPF编程的相关的内容,也推荐了本书。今天要来讲一下在WPF如何开展3D编程。

使用的xmal 和C#开发的时候:需要使用如下的关键要素:

1:摄像机,是用来模拟成像的,现在WPF支持正交(orthographical )和透视(perspective )摄像机。你需要确定它的位置(position),镜头正对的方向(LookDirection),还有就是摄像机的向上方向(UpDirection),如果不是很明白这个属性,可以参考http://topic.csdn.net/u/20090214/23/f8201d15-be5c-483d-ac97-c0a33151e8fb.html

2:3D模型:一个3D模型定义了场景中的一个物体,包含一个Geometry对象 。Geometry对象是一个网格,和一个材质(Material )对象,材质具有漫反射(diffuse),镜面(specular )或放射(emmisive )几种类型,材质本身具有一个画刷。如果想对材质进一步的了解,可以看:http://app.cnzer.cn/html-85837-1.html,上面有对网格的详细解释。

3:光源:  如果场景中没有光源,你将什么也看不到。因此我们需要在我们的场景当中至少放置一个光源来照亮我们的模型。WPF支持如下几种不同的光源:AmbientLight (自然光),DirectionalLight (方向光)PointLight (点光源),SpotLight (聚光源)。你需要确定光源的方向(Direction),颜色(color)等属性

4:viewport3D控件:这个控件类似容器,放入上述的元件。其实在c#编程的时候,你会发现camera等式viewport3D的成员属性。

下面是一个c#改写的,源程序来自http://www.w3ceye.com/article.asp?id=45

 

代码
 
  
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Windows.Media.Media3D;



namespace WPF3D1

{

/// <summary>

/// Interaction logic for MainWindow.xaml

/// </summary>

public partial class MainWindow : Window

{

Viewport3D vp
= new Viewport3D();

public MainWindow()

{

InitializeComponent();

this .Content = vp;

SetupCamera();

GetModelVisual3D();

}



private void SetupCamera()

{

PerspectiveCamera camera
= new PerspectiveCamera();

camera.Position
= new Point3D( - 40 , 40 , 40 );

camera.UpDirection
= new Vector3D( 0 , 0 , 1 );

camera.LookDirection
= new Vector3D( 40 , - 40 , - 40 );

vp.Camera
= camera ;

}

private void GetModelVisual3D()

{

Model3DGroup mg
= new Model3DGroup();

DirectionalLight dl
= new DirectionalLight();

dl.Color
= Colors.White; dl.Direction = new Vector3D( - 1 , - 1 , - 3 );

GeometryModel3D gm
= new GeometryModel3D();



MeshGeometry3D meshg
= new MeshGeometry3D();

Point3DCollection pc
= new Point3DCollection();

pc.Add(
new Point3D( 0 , 0 , 0 ));pc.Add( new Point3D( 10 , 0 , 0 ));pc.Add( new Point3D( 10 , 10 , 0 ));

pc.Add(
new Point3D( 0 , 10 , 0 ));pc.Add( new Point3D( 0 , 0 , 10 ));pc.Add( new Point3D( 10 , 0 , 10 ));

pc.Add(
new Point3D( 10 , 10 , 10 ));pc.Add( new Point3D( 0 , 10 , 10 ));

meshg.Positions
= pc;

Int32Collection ic
= new Int32Collection();

ic.Add(
0 );ic.Add( 1 );ic.Add( 3 );ic.Add( 1 );ic.Add( 2 );ic.Add( 3 );ic.Add( 0 );ic.Add( 4 );ic.Add( 3 );

ic.Add(
4 );ic.Add( 7 );ic.Add( 3 );ic.Add( 4 );ic.Add( 6 );ic.Add( 7 );ic.Add( 4 );ic.Add( 5 );ic.Add( 6 );

ic.Add(
0 );ic.Add( 4 );ic.Add( 1 );ic.Add( 1 );ic.Add( 4 );ic.Add( 5 );ic.Add( 1 );ic.Add( 2 );ic.Add( 6 );

ic.Add(
6 );ic.Add( 5 );ic.Add( 1 );ic.Add( 2 );ic.Add( 3 );ic.Add( 7 );ic.Add( 7 );ic.Add( 6 );ic.Add( 2 );

meshg.TriangleIndices
= ic;



DiffuseMaterial dm
= new DiffuseMaterial();

dm.Brush
= Brushes.Red;



gm.Geometry
= meshg;

gm.Material
= dm;



mg.Children.Add(dl);

mg.Children.Add(gm);



ModelVisual3D mv
= new ModelVisual3D();

mv.Content
= mg;



vp.Children.Add(mv);

}

}

 

上面讲到的这些中,有一个重要的问题没有提到,就是3的模型是如何获得的,一般教程都会将使用3D建模软件生成一些数据,然后来进行设计。这是怎么回事,原来.Net没有直接提供可以生成3D模型的工具,然而直接想的话,会很复杂,所以要使用3D建模软件,那使用什么软件呢?

1,3d max,这个软件可以生成一些坐标点,然后用于上面程序中涉及到的网格的位置和朝向的直接赋值。

 2,Electric Rain ZAM 3D
Electric Rain ZAM 3D是一个功能齐全的3D建模软件,可轻松创建,定制和动画基于Windows Vista(win7也行) 应用的3D界面要素。 一旦创建三维场景,Electric Rain ZAM 3D自动生成XAML(扩展应用程序标记语言)标记,转换成一个三维要素的Windows Presentation Foundation "WPF三维场景。 XAML的创建的文件可直接集成到您的应用程序开发环境,创造丰富,用户体验前所未有。这个软件现在又15天的试用期。

可以到如下网站去下载:http://www.erain.com/products/zam3d/DefaultPDC.asp

3,Electric Rain Swift 3D 6 
 Swift 3D 是专业的矢量3D软件,它的出现充分弥补了Flash在3D方面的不足,它以娇小的身躯强大的功能位居Flash第三方软件第一位。拥有Swift 3D,从此放飞你的创意,让你的大脑做360度的旋转!Electric Rain的Swift3D是一个基于矢量的3D创作工具,设计师们能够迅速地从字体、基本3D元素和已有SWF格式3D模型创建3D图像。Swift 3D这个能够方便制作3D Flash的小软件已经得到大家的熟悉和喜爱.它不再仅仅局限于制作简单三维效果的Flash动画,更在文字、材质、建模、渲染等方面新增了很多功能,可以称得上是一个准专业级的3D 设计软件了! 新版 支持XAML 包括WPF 和silverlight !

(上面两个介绍来自http://blog.csdn.net/luozhuang/archive/2009/11/13/4808444.aspx)

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/676910

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。