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

痛定思痛。 2022-12-21 04:53 250阅读 0赞

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70

  1. <Page
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  4. <Grid>
  5. <Viewport3D>
  6. <Viewport3D.Camera>
  7. <PerspectiveCamera Position="0,0,1" x:Name="camera"></PerspectiveCamera>
  8. </Viewport3D.Camera>
  9. <Viewport3D.Children>
  10. <ModelVisual3D>
  11. <ModelVisual3D.Content>
  12. <Model3DGroup >
  13. <GeometryModel3D>
  14. <GeometryModel3D.Material>
  15. <DiffuseMaterial Brush="Red"/>
  16. </GeometryModel3D.Material>
  17. <GeometryModel3D.Geometry>
  18. <MeshGeometry3D Positions="0,0,0 2,0,0 2,2,0 0,2,0" TriangleIndices="0,1,2 0,2,3">
  19. </MeshGeometry3D>
  20. </GeometryModel3D.Geometry>
  21. </GeometryModel3D>
  22. </Model3DGroup>
  23. </ModelVisual3D.Content>
  24. </ModelVisual3D>
  25. </Viewport3D.Children>
  26. </Viewport3D>
  27. </Grid>
  28. </Page>

1 3D 画布
要画画总的有个画布。Viewport3D(投影3D场景的平面)是WPF中的3D画布,类于2D中的Canvas。
Children…

这就是显示3D的根元素;

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

此元素是相机;

3D的话一定要理解相机;否则你的图形挂了你不知道是怎么回事;先看下图,位置关系是: 真实物体 - 2D屏幕 - 相机;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70 1

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

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70 2

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70 3

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

先学这么多;

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读