如果绘制3D立方体,需绘制6个面;下面代码绘制一个面;来逐步理解此代码;
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9QjMZhXS6JWa50WWqpkMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1kjN1QDOzEjM0ETMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position="0,0,1" x:Name="camera"></PerspectiveCamera>
</Viewport3D.Camera>
<Viewport3D.Children>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup >
<GeometryModel3D>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Red"/>
</GeometryModel3D.Material>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions="0,0,0 2,0,0 2,2,0 0,2,0" TriangleIndices="0,1,2 0,2,3">
</MeshGeometry3D>
</GeometryModel3D.Geometry>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
</Viewport3D>
</Grid>
</Page>
1 3D 画布
要画画总的有个画布。Viewport3D(投影3D场景的平面)是WPF中的3D画布,类于2D中的Canvas。<Viewport3D>
Children…
</Viewport3D>
这就是显示3D的根元素;
2 相机
创建三维场景时,实际上是要创建三维对象的二维表示形式。 由于三维场景的外观会因观察者的观察位置不同而异,因此必须指定观察位置。而观察位置就是由相机(Camera 类)来为三维场景指定的。
<PerspectiveCamera Position="0,0,8" x:Name="camera"></PerspectiveCamera>
此元素是相机;
3D的话一定要理解相机;否则你的图形挂了你不知道是怎么回事;先看下图,位置关系是: 真实物体 - 2D屏幕 - 相机;
先理解相机的Z坐标;相机位于Z轴上;如果把相机移近,等于Z坐标减小,看到的物体将变大;如果把相机移远,等于Z坐标增大,看到的物体将变小;
把相机Z坐标由8变为20,绘制的面变小;
相机Z坐标变为1,看到绘制的面变大;
3 3D模型
Model3D 是三维对象的抽象基类。若要生成三维场景,需要一些要查看的对象,而且构成场景图的对象必须派生自 Model3D。
要生成模型,首先生成一个基元或网格。 三维基元是一系列构成单个三维实体的顶点。
WPF 三维系统目前提供 MeshGeometry3D 类,使用该类可以指定任何几何形状;它目前不支持预定义的三维基元(如球体和立方体)。
ModelVisual3D 类
命名空间:
System.Windows.Media.Media3D
程序集:
PresentationCore.dll
提供一个呈现 Visual3D 对象的 Model3D。
ModelVisual3D类说明和示例参见;
https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.media.media3d.modelvisual3d?view=net-5.0
先学这么多;