在组成 Microsoft Windows Presentation Foundation 的类中,System.Windows.Media.Media3D 命 名空间中的那些类很突出。这些类的用途是使主流 Windows 应用程序能够显示三维图形。与 Windows Presentation Foundation 2D 图形一样,通常可以用可扩展应用程序标记语言 (XAML) 非常方 便地访问 3D 图形,但二者的相似性非常少。3D 图形编程涉及非常不同的概念和约定。其中,3D 和 2D 相同的部分是画笔的区域:您始终要用 2D 画笔来覆盖 3D 可视区的表面。
图 1 显示了 Hello3D,这是一个 3D 版的传统“Hello, World”程序。如果您运行的是 Windows Vista 或者是安装了 Microsoft .NET Framework 3.0 运行库的 Windows XP,则 只需使用 Internet Explorer 即可启动产生该图形的 XAML 代码,从而可以看到图像(参见图 2) 。
图 1 Hello3D 图像
3D 视区
在 3D 图形编程中,没有线条、Bezier 样条曲线、矩形或椭圆。每个 3D 物体都是三 维坐标空间中的三角形的集合。三角形是 3D 编程的基本单位,这是因为每个单独的三角形总是能定义一 个平面,而三角形集合可以模仿立体物体,甚至可以模拟曲面。随着您深入了解 3D 编程,您将会用三角 形看待生活中的所有事物。
正如 Hello3D.xaml 所示,3D 视图由 Viewport3D 元素组成。3D 场 景需要一个或多个 GeometryModel3D 类型的物体、一个或多个光源、以及一个用于控制 3D 物体如何投 射到 2D 表面从而控制观看者如何看到图像的摄像机。
GeometryModel3D 元素有三个重要属性: Geometry、Material 和 BackMaterial。Geometry 属性被设置为 MeshGeometry3D 元素,用于根据坐标 点和三角形描述可视物体。Material 和 BackMaterial 属性说明物体的前面和背面如何着色。在 Hello3D.xaml 中,这两个属性被设置为 DiffuseMaterial 类型的对象。Material 属性是 VisualBrush ,由包含文字“Hello, World”的 TextBlock 组成。BackMaterial 属性只是红色画笔。(如 果要看到物体的背面,请将摄像机 Position 属性更改为“0 0 -5”,并将 LookDirection 更改为“0 0 1”。)