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(-, , );
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编程介绍的更多相关文章
- WPF 3D 获取鼠标在场景的3d坐标
原文:WPF 3D 获取鼠标在场景的3d坐标 上一篇中我们谈到了WPF 3d做图的一些简单原理,这里我们简单介绍一下怎样获得鼠标在场景中的3d坐标,知道了3d坐标就可以进行很多操作了: 首先介绍一下3 ...
- 书籍:wpf学习书籍介绍
WPF参考书推荐 下面先整理下,本人主要学习的WPF参考书: 1.WPF编程宝典(C#2010) 该书:(必读) 心得体会:读完该书后,你对WPF的基础和基本控件的使用,包括WPF的编程模型,相比Wi ...
- UWP简单示例(二):快速开始你的3D编程
准备 IDE:Visual Studio 2015 了解并学习:SharpDx官方GitHub 推荐Demo:SharpDX_D3D12HelloWorld 第一节 世界 世界坐标系是一个特殊的坐标系 ...
- WPF 3D 知识点大全以及实例
引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象. 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当 ...
- 开始3D编程前需注意的十件事
http://www.csdn.net/article/2013-06-21/2815949-3d-programming 原文作者Vasily Tserekh是名3D编程爱好者,他发表了一篇博文&l ...
- UWP简单示例(二):快速开始你的3D编程
准备 IDE:Visual Studio 开源库:GitHub.SharpDx 入门示例:SharpDX_D3D12HelloWorld 为什么选择 SharpDx? SharpDx 库与 UWP 兼 ...
- UE4 中的 C++ 编程介绍
https://docs.unrealengine.com/latest/CHN/Programming/Introduction/index.html UE4 中的 C++ 编程介绍 Unreal ...
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...
- WPF 3D model - Sphere, Cone, and Cylinder
原文:WPF 3D model - Sphere, Cone, and Cylinder Extending Visual3D - Sphere, Cone, and Cylinder http: ...
随机推荐
- android闹钟实现原理
闹钟的原理可用下面我自己画的一幅图来概括:(不对的地方,尽管吐槽) 我们来看看新建闹钟到闹钟响铃的步骤: 1.新建一个闹钟: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- [outlook] [vba] Highlight text in body of incoming emails
http://www.outlookcode.com/threads.aspx?forumid=2&messageid=33313 Sub CustomMailMessageRule(MyMa ...
- hadoop集群中的日志文件 分类: A1_HADOOP 2015-02-28 20:37 680人阅读 评论(0) 收藏
hadoop存在多种日志文件,其中master上的日志文件记录全面信息,包括slave上的jobtracker与datanode也会将错误信息写到master中.而slave中的日志主要记录完成的ta ...
- web中的重定向与转发
Redirect:重定向(客户端重定向) 是HTTP协议规定的一种机制:当client向server发送一个请求,要求获取一个资源时,在server接收到这个请求后发现请求的这个资源实际存放在另一个位 ...
- angular表单经验分享
原文 https://www.jianshu.com/p/af359bd04f32 大纲 1.表单的名字不可以和传入的值的名字相同 2.在模板驱动表单的时候要使用angular表单的验证功能,需要将n ...
- 1.2.4 Java Annotation 提要
(本文是介绍依赖注入容器Spring和分析JUnit源码的准备知识) Java Annotation(标注) java.lang.annotation.Annotation是全部Java标注的父接口. ...
- html5-8 如何控制html5中的视频标签和音频标签
html5-8 如何控制html5中的视频标签和音频标签 一.总结 一句话总结:找到视频或者音频的element对象,然后查手册看对应的方法或者属性就可以,里面有控制的. 1.如何控制html5中的视 ...
- [Javascript] Understand Function Composition By Building Compose and ComposeAll Utility Functions
Function composition allows us to build up powerful functions from smaller, more focused functions. ...
- IT忍者神龟之Hibernat持久化对象-数据表映射配置回想
1.持久化对象POJO编写规则: 1) 有空參public构造器: 2) 提供标识属性.映射数据表主键: 3) 属性提供setter和getter方法. 4) 属性使用基本数据类型的包装类型.基本类型 ...
- HTML中DOM核心知识有哪些(带实例超详解)
HTML中DOM核心知识有哪些(带实例超详解) 一.总结: 1.先取html元素,然后再对他进行操作,取的话可以getElementById等 2.操作的话,可以是innerHtml,value等等 ...