WPF中的3D

in 软件 with 0 comment

坐标系 Coodinate System

首先需要知道一点坐标系的知识,WPF中二维图形的坐标系将原点定位在呈现区域(通常是屏幕)的左上角。 在二维系统中,x 轴上的正值朝右,y 轴上的正值朝下。而在三维坐标系中,原点位于呈现区域的中心,x 轴上的正值朝右,但是 y 轴上的正值朝上,z 轴上的正值从原点向外朝向观察者。其实就是个右手坐标系,z轴朝向观察者。如下图
301426008457070.png

接下来呢,介绍建立一个3D图形的几个要素

3D 画布

跟平面的canvas一样,3d的东西也要放在一个容器里,这个容器叫Viewport3D

<Viewport3D>
Children…
</Viewport3D>

相机

用户看到的3d物体其实是投影过来的一个面。当你创建三维场景时,一定要记住实际上是要创建三维对象的二维表示形式。 由于三维场景的外观会因观察者的观察位置不同而异,因此必须指定观察位置。而观察位置就是由相机(Camera 类)来为三维场景指定的。
071102047212281.png

灯光

和现实生活中一样,如果没有光我们将什么也看不到。因此我们需要在我们的场景中至少放置一盏灯来照亮我们场景中的模型。
WPF中支持不同类型的光源, 如下:

061415251589467.gif

3D模型

主角登场。Model3D 是三维对象的抽象基类。若要生成三维场景,需要一些要查看的对象,而且构成场景图的对象必须派生自 Model3D。 目前,WPF 支持用 GeometryModel3D 对几何形状进行建模。 此模型的 Geometry 属性采用网格基元。

要生成模型,首先生成一个基元或网格。 三维基元是一系列构成单个三维实体的顶点。 大多数三维系统都提供在最简单的闭合图(由三个顶点定义的三角形)上建模的基元。 由于三角形的三个点在一个平面上,因此你可以继续添加三角形,以便对网格这样较为复杂的形状建模。

材质(Material)

在二维中,可以使用 Brush 类来向屏幕中的区域应用颜色、图案、渐变或其他可视化内容。 但是,三维对象的外观是照明模型的功能,而不只是应用于它们的颜色或图案。 实际对象的图面质量不同,它们反射光的方式也会有所不同:光亮的图面与粗糙或不光滑的图面看上去不同,某些对象似乎可以吸收光,而某些对象似乎能够发光。 您可以向三维对象应用与应用于二维对象的完全相同的画笔,但是你不能直接应用它们。

Responses