当前位置>>知识集锦

WPF三维图形处理功能提供了对三维的设计宗旨支持而不是提供功能齐全的游戏开发平台。通过WPF三维实现,开发人员可使用与该平台所提供给二维图形的相同的功能,对标记和过程代码中的三维图形进行绘制、转换和动画处理。WPF中的三维图形内容封装在ViewPort3D元素中,该元素可以参与二维元素结构,viewPort3D充当三维场景中的一个窗口(视区),更准确地说,它是三维场景所投影到的图面。WPF提供了标准的构建三维场景的函数:三维坐标空间变换、照相机和投影、模型和网格基元、向模型应用材质、照亮场景、变换模型、对模型进行动画处理等,利用它们,可以从底层构建所需要的三维处理系统,灵活处理特定需求。

三维坐标空间

在三维坐标系中,WPF定义原点位于呈现区域的中心,x轴上的正值朝右,但是y轴上的正值朝上,z轴上的正值从原点向外朝向观察者。由这些轴定义的空间是三维对象在WPF中的固定参考框架。当您在该空间中生成模型并创建光源和照相机以查看这些模型时,一定要在向每个模型应用变换时,将固定参考框架或“全局空间”与您为该模型创建的局部参考框架区分开。另请记住,根据光源和照相机设置,全局空间中的对象可能会看上去完全不同或者根本不可见,但是照相机的位置不会改变对象在全局空间中的位置。

照相机和投影

创建三维场景时,实际上是要创建三维对象的二维表示形式。由于三维场景的外观会因观察者的观察位置不同而异,因此必须指定观察位置。可以使用Camera类来为三维场景指定观察位置。

三维场景在二维图面上表示其实就是将场景投影到观察表面上。WPF提供了PerspeetiveCamera(透视投影)和OrthographieCamera(正投影)两种方式的照相机,PerspectiveCamera指定用来对场景进行透视收缩的投影,即消失点透视,越远离观察点,场景点越向消失点靠近;orthographicCamera指定三维模型到二维可视化图面上的正投影,它描述了一个侧面平行的取景框,而不是侧面汇集在场景中一点的取景框。

模型和网格基元

要生成三维场景,需要一些要查看的对象,目前,wPF支持用GeometryMedel3D对几何形状进行建模,构成场景图的对象。要生成模型,首先要生成一个基元或网格。三维基元是一系列构成单个三维实体的项点,大多数三维系统都提供在最简单的闭合图(由三个顶点定义的三角形)上建模的基元,WPF也一样。由于三角形的三个点在一个平面上,因此您可以继续添加三角形,以便对网格这样较为复杂的形状建模。

为了呈现模型的图面,图形系统需要有关曲面在任何给定三角形上的朝向信息,图形系统使用此信息来针对该模型进行照明计算:直接朝向光源的图面比偏离光源的图面显得更亮,WPF可以使用位置坐标来确定默认的法向量,但是开发着也可以指定不同的法向量来近似计算曲面的外观。

模型材质应用

为了使网格看上去像三维对象,必须向其应用纹理,以便覆盖由顶点和三角形定义的图面,从而使其可以由照相机照明和投影。三维对象的外观是照明模型的功能,而不只是应用于它们的颜色或图案。实际对象的图面质量不同,它们反射光的方式也会有所不同:光亮的图面与粗糙或不光滑的图面看上去不同,某些对象似乎可以吸收光,而某些对象似乎能够发光。可以向三维对象应用与应用于二维对象的完全相同的画笔,但是不能直接应用它们。

WPF使用多种材质定义模型图面的特征:DiffuseMaterial向模型应用好像漫射光来照亮的画笔、SpecularMaterial向模型应用好像模型的表面坚硬或者光亮,能够反射光线一样的画笔、E而SsiveMaterial向模型应用好像模型自身发出的光与画笔的颜色相同的画笔,这不会使模型成为光源。

为进一步提高显示效果,可以指定模型的背面材质。为了实现某些图面质量(如发光或发射效果),可以向模型连续应用几个不同的画笔,即组合若干个不同的材质。

场景照亮

与实际光一样,三维图形中的光照能够使图面可见。更确切地说,光照确定了场景的哪个部分将包括在投影中。WPF中的光照对象创建了各种光和阴影效果,而且是按照各种实际光的行为建模的。场景中必须至少包括一个光源,否则模型将不可见。

模型变换

模型创建时,它们在场景中具有特定的位置。为了在场景中移动、旋转这些模型或者更改这些模型的大小而更改用来定义模型本身的顶点是不切实际的,可以向模型应用转换。每个模型对象都有一个可用来对模型进行移动、重定向或调整大小的Transform属性。当应用转换时,实际上是按照由转换功能指定的向量或值(以适用者为准)来有效地偏移模型的所有点。





评论