是否可以在WPF中绘制3D曲线?即我需要哪些课程?你能给我这么代码片段。
答案 0 :(得分:4)
要在WPF中渲染3D场景,您必须使用名为ViewPort3D
的元素。这有Camera
,Visual3D
的集合。 Visual3D
的具体子类型为ModelVisual3D
。此视觉效果有助于呈现Model3D
。所有3D形状均由GeometryModel3D
或更复杂的Model3DGroup
表示(均来自Model3D
)。我们在这里关注属性GeometryModel3D.Geometry
(Geometry3D
类型)。目前,WPF仅支持名为Geometry3D
的{strong> 仅{1}} {<1}}种<{1}}。但是这个几何体由大量的三角形组成。为了定义三角形,它有一个MeshGeometry3D
s(Point3D
)的集合,表示三角形的顶点,以及Positions
(int
)的集合,用于指示如何连接顶点(保存在TriangleIndices
中)以生成实际的三角形。
这意味着您想要绘制的曲线应该具有某种形状,例如某种圆柱体(如粉条)或者就像一条布条......无论如何它并不容易。下面的演示代码将曲线渲染为细条(不是圆形),但事实上我们将它变得如此之薄,以至于您可以看到它看起来像一条线(取决于我们观察场景的距离)。
正如我上面所说,构建曲线所需要的是填充Positions
的信息(Positions
和TriangleIndices
)。我们需要一些曲线方程,做一些循环来得到Point3Ds的集合(属于曲线),同时恰当地填充MeshGeometry3D
。
以下是代码明细:
<强> XAML 强>:
TriangleIndices
注意XAML代码中<Grid Name="grid">
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position="55,55,55" LookDirection="-1,-1,-1"
UpDirection="0,1,0" FieldOfView="20"/>
</Viewport3D.Camera>
<Viewport3D.Children>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<DirectionalLight Color="White" Direction="1,0,-1"/>
<AmbientLight Color="Black"/>
<GeometryModel3D>
<GeometryModel3D.Material>
<MaterialGroup>
<DiffuseMaterial Brush="Red"/>
<EmissiveMaterial Brush="#330000ff"/>
</MaterialGroup>
</GeometryModel3D.Material>
<GeometryModel3D.BackMaterial>
<MaterialGroup>
<DiffuseMaterial Brush="Red"/>
<EmissiveMaterial Brush="#330000ff"/>
</MaterialGroup>
</GeometryModel3D.BackMaterial>
<GeometryModel3D.Geometry>
<MeshGeometry3D x:Name="geo"/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0,1,0"
Angle="0" x:Name="rot"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
</GeometryModel3D.Transform>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
<Viewport3D.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard Storyboard.TargetName="rot">
<DoubleAnimation Storyboard.TargetProperty="Angle" By="360"
RepeatBehavior="Forever" Duration="00:00:10"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Viewport3D.Triggers>
</Viewport3D>
</Grid>
的{{1}}为Name
,我们需要参考此内容来使用代码构建曲线。
代码:
MeshGeometry3D
注意:我强烈建议您先阅读WPF中的基本3D概念,至少应该了解如何连接点(在geo
中)以指示三角形表面为你想要什么。一旦理解了,就可以理解上面的代码。