如何在WPF中绘制3D曲线?

时间:2014-08-22 10:37:14

标签: wpf 3d draw

是否可以在WPF中绘制3D曲线?即我需要哪些课程?你能给我这么代码片段。

enter image description here

1 个答案:

答案 0 :(得分:4)

要在WPF中渲染3D场景,您必须使用名为ViewPort3D的元素。这有CameraVisual3D的集合。 Visual3D的具体子类型为ModelVisual3D。此视觉效果有助于呈现Model3D。所有3D形状均由GeometryModel3D或更复杂的Model3DGroup表示(均来自Model3D)。我们在这里关注属性GeometryModel3D.GeometryGeometry3D类型)。目前,WPF仅支持名为Geometry3D的{​​strong> 仅{1}} {<1}}种<{1}}。但是这个几何体由大量的三角形组成。为了定义三角形,它有一个MeshGeometry3D s(Point3D)的集合,表示三角形的顶点,以及Positionsint)的集合,用于指示如何连接顶点(保存在TriangleIndices中)以生成实际的三角形。

这意味着您想要绘制的曲线应该具有某种形状,例如某种圆柱体(如粉条)或者就像一条布条......无论如何它并不容易。下面的演示代码将曲线渲染为细条(不是圆形),但事实上我们将它变得如此之薄,以至于您可以看到它看起来像一条线(取决于我们观察场景的距离)。

正如我上面所说,构建曲线所需要的是填充Positions的信息(PositionsTriangleIndices)。我们需要一些曲线方程,做一些循环来得到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中)以指示三角形表面为你想要什么。一旦理解了,就可以理解上面的代码。