天天看点

WPF 3D基础学习 - 画布、相机、Model3D(1)

如果绘制3D立方体,需绘制6个面;下面代码绘制一个面;来逐步理解此代码;

WPF 3D基础学习 - 画布、相机、Model3D(1)
<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屏幕 - 相机;

WPF 3D基础学习 - 画布、相机、Model3D(1)

先理解相机的Z坐标;相机位于Z轴上;如果把相机移近,等于Z坐标减小,看到的物体将变大;如果把相机移远,等于Z坐标增大,看到的物体将变小;

把相机Z坐标由8变为20,绘制的面变小;

WPF 3D基础学习 - 画布、相机、Model3D(1)

相机Z坐标变为1,看到绘制的面变大;

WPF 3D基础学习 - 画布、相机、Model3D(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

先学这么多;