原文: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(-, , );

camera.UpDirection = new Vector3D(, , );

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

vp.Camera = camera ;

}

private void GetModelVisual3D()

{

Model3DGroup mg = new Model3DGroup();

DirectionalLight dl = new DirectionalLight();

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

GeometryModel3D gm = new GeometryModel3D();



MeshGeometry3D meshg = new MeshGeometry3D();

Point3DCollection pc = new Point3DCollection();

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

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

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

meshg.Positions = pc;

Int32Collection ic = new Int32Collection();

ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();

ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();

ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();

ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();ic.Add();

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)

WPF 3D编程介绍的更多相关文章

  1. WPF 3D 获取鼠标在场景的3d坐标

    原文:WPF 3D 获取鼠标在场景的3d坐标 上一篇中我们谈到了WPF 3d做图的一些简单原理,这里我们简单介绍一下怎样获得鼠标在场景中的3d坐标,知道了3d坐标就可以进行很多操作了: 首先介绍一下3 ...

  2. 书籍:wpf学习书籍介绍

    WPF参考书推荐 下面先整理下,本人主要学习的WPF参考书: 1.WPF编程宝典(C#2010) 该书:(必读) 心得体会:读完该书后,你对WPF的基础和基本控件的使用,包括WPF的编程模型,相比Wi ...

  3. UWP简单示例(二):快速开始你的3D编程

    准备 IDE:Visual Studio 2015 了解并学习:SharpDx官方GitHub 推荐Demo:SharpDX_D3D12HelloWorld 第一节 世界 世界坐标系是一个特殊的坐标系 ...

  4. WPF 3D 知识点大全以及实例

    引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象. 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当 ...

  5. 开始3D编程前需注意的十件事

    http://www.csdn.net/article/2013-06-21/2815949-3d-programming 原文作者Vasily Tserekh是名3D编程爱好者,他发表了一篇博文&l ...

  6. UWP简单示例(二):快速开始你的3D编程

    准备 IDE:Visual Studio 开源库:GitHub.SharpDx 入门示例:SharpDX_D3D12HelloWorld 为什么选择 SharpDx? SharpDx 库与 UWP 兼 ...

  7. UE4 中的 C++ 编程介绍

    https://docs.unrealengine.com/latest/CHN/Programming/Introduction/index.html UE4 中的 C++ 编程介绍 Unreal ...

  8. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍

    WPF自学入门(十一)WPF MVVM模式Command命令   在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...

  9. WPF 3D model - Sphere, Cone, and Cylinder

    原文:WPF 3D model - Sphere, Cone, and Cylinder   Extending Visual3D - Sphere, Cone, and Cylinder http: ...

随机推荐

  1. js进阶 12-7 pageY和screenY以及clientY的区别是什么

    js进阶 12-7 pageY和screenY以及clientY的区别是什么 一.总结 一句话总结:pageY是距文件,screenY是获取显示器屏幕位置的坐标,clientY是页面视口. 没有滚动条 ...

  2. Iaas、Paas和Saas的区别

    Iaas: Infrastructure-as-a-service(基础设施即服务),Iaas上购买的一般是主机,用户不光要开发程序,还要考虑搭建系统,维护运行环境,以及怎么容灾,怎么做到高可用,怎么 ...

  3. gerrit docker

    修改项目配置文件 git clone ssh://admin@localhost:29418/All-Projects && scp -p -P 29418 admin@localho ...

  4. 【solr专题之四】在Tomcat 中部署Solr4.x 分类: H_HISTORY 2014-07-17 16:08 1286人阅读 评论(0) 收藏

    1.安装Tomcat (1)下载并解压至/opt/tomcat中 # cd /opt/jediael # tar -zxvf apache-tomcat-7.0.54.tar.gz # mv apac ...

  5. CISCO - 查找命令行

    http://www.cisco.com/c/en/us/support/web/tools/help/command_search_best_practices.html Support Best ...

  6. 【Record】9.16..9.23

  7. string与QString之间的转换(两种方法:fromStdString直接转换,或者fromLocal8Bit(cstr.c_str())

    string str;QString qstr; //从QString 到 std::stringstr = qstr.toStdString(); //从std::string 到QStringqs ...

  8. 【福利】微信小程序精选Demo合集

    小编最近在开发小程序,也读到了不少优秀的小程序源码,项目中有些需求可以直接从源码里粘贴复制过来,虽然这样做不利于自己独立编写代码,但比较是给公司做项目啊,秉着效率第一的原则,简直没有什么比ctrl+c ...

  9. CEO 系列之一:如何当好创业公司 CEO?(不要用战术的勤奋掩盖战略的懒惰,在创业过程中,最核心问题,就是能把创业情怀变成具体问题。这个问题越具体越好)

    1. 创业公司要先定一个目标,要善于把目标简化, 分解成一个, 一个更具体,更简单的问题2. 针对简单的问题进行聚焦, 做深做强3. 在做的过程中, 把断地推出自己的产品到市场上去试错, 要用事实来证 ...

  10. 【机器学习实战】第5章 Logistic回归(逻辑回归)

    第5章 Logistic回归 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/ ...