WPF 3D编程介绍

简介: 原文:WPF 3D编程介绍上一篇文章简单的介绍了WPF编程的相关的内容,也推荐了本书。今天要来讲一下在WPF如何开展3D编程。 使用的xmal 和C#开发的时候:需要使用如下的关键要素: 1:摄像机,是用来模拟成像的,现在WPF支持正交(orthographical )和透视(perspective )摄像机。
原文: 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)

目录
相关文章
|
4月前
|
人工智能 机器人 C#
Windows编程课设(C#)——基于WPF和.net的即时通讯系统(仿微信)
一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。
C#编程-127:WPF初级入门
C#编程-127:WPF初级入门
C#编程-127:WPF初级入门
C#编程-126:WPF初步
C#编程-126:WPF初步
C#编程-126:WPF初步
|
前端开发 C#
C#网络应用编程,实验一:WPF练习
C#网络应用编程,实验一:WPF练习
243 1
C#网络应用编程,实验一:WPF练习
C#编程-127:WPF初级入门
C#编程-127:WPF初级入门
133 0
C#编程-127:WPF初级入门
|
C# Windows
C#编程-126:WPF初步
C#编程-126:WPF初步
125 0
C#编程-126:WPF初步
|
C#
WPF 3D动态加载模型文件
原文:WPF 3D动态加载模型文件 这篇文章需要读者对WPF 3D有一个基本了解,至少看过官方的MSDN例子。 一般来说关于WPF使用3D的例子,都是下面的流程: 1.美工用3DMAX做好模型,生成一个obj文件 2.程序然后打开Blender,将obj拖动到Blender中,生成xaml代码   但是这样做会有至少两个问题: 1. 维护麻烦,因为一旦模型修改,你需要重复上面的步骤,至少要修改xaml的代码。
1461 0
|
C#
使用WPF实现3D场景[一]
原文:使用WPF实现3D场景[一] 在这篇文章里,将介绍如何实现一个简单的三维场景,一个三维的空间,包括空间内的三维物体的组合. 首先介绍一下一个三维场景里的基本元素: 先是定义一个简单的三维的场景环境 代码如下: 以上是定义了一个名称叫做 myViewport 的的三维场景,接下来可以在这个三位场景里添加一些元素: 元素一:照相机 照相机是三维场景内用户的视角,当然照相机也是唯一的。
1494 0
|
C#
使用WPF实现3D场景[二]
原文:使用WPF实现3D场景[二] 在上一篇的文章里我们知道如何构造一个简单的三维场景,这次的课程我将和大家一起来研究如何用代码,完成对建立好了的三维场景的观察。
1078 0
|
C#
WPF利用HelixToolKit后台导入3D模型
原文:WPF利用HelixToolKit后台导入3D模型 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37591671/article/details/75044423 ...
3196 0