[英]Trying to draw the edges of a rectangular cube in WPF but not successful
我正在尝试仅绘制和显示矩形立方体的边缘或侧面,但使用 WPF 仍然没有成功。它位于我想在 windows 表单 (c#) 应用程序中显示的用户控件内。 正如我所见,WPF 中的 3D 个对象是使用三角形制作的,所以我尝试使用矩形绘制线条,其中矩形的宽度很小(足以被识别为立方体的边缘或侧面)但它没有显示正确。 这是我正在使用的代码:
<UserControl x:Class="Spatial_and_Temporal_Research.BoundingBoxes"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" DataContext="{Binding}" Height="509" Width="739" FontFamily="Times New Roman">
<Grid>
<!-- Place a Label control at the top of the view. -->
<Label
HorizontalAlignment="Center"
TextBlock.TextAlignment="Center"
FontSize="20"
Foreground="Red"
Content="Model: Cone"/>
<!-- Viewport3D is the rendering surface. -->
<Viewport3D Name="myViewport" >
<!-- Add a camera. -->
<Viewport3D.Camera>
<PerspectiveCamera
FarPlaneDistance="20"
LookDirection="-6, -5, -4"
UpDirection="0,1,0"
NearPlaneDistance="1"
Position="6 5 4"
FieldOfView="45" />
</Viewport3D.Camera>
<!-- Add models. -->
<Viewport3D.Children>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup >
<Model3DGroup.Children>
<!-- Lights, MeshGeometry3D and DiffuseMaterial objects are added to the ModelVisual3D. -->
<AmbientLight Color="White" />
<!-- Define a red cone. -->
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions="-0.55 -0.5 -0.5 -0.45 -0.5 -0.5 -0.55 -0.5 0.5 -0.45 -0.5 0.5 -0.55 0.5 -0.5 -0.45 0.5 -0.5 -0.55 0.5 0.5 -0.45 0.5 0.5 0.45 -0.5 -0.5 0.55 -0.5 -0.5 0.45 -0.5 0.5 0.55 -0.5 0.5 -0.5 -0.55 -0.5 -0.5 -0.45 -0.5 0.5 -0.55 -0.5 0.5 -0.45 -0.5 -0.5 -0.55 0.5 -0.5 -0.45 0.5 0.5 -0.55 0.5 0.5 -0.45 0.5 0.45 0.5 -0.5 0.55 0.5 -0.5 0.45 0.5 0.5 0.55 0.5 0.5 -0.5 0.45 -0.5 -0.5 0.55 -0.5 0.5 0.45 -0.5 0.5 0.55 -0.5 -0.5 0.45 0.5 -0.5 0.55 0.5 0.5 0.45 0.5 0.5 0.55 0.5"
TriangleIndices="0 2 3 3 1 0 4 6 7 7 5 4 1 0 4 4 5 1 3 2 6 6 7 3 8 10 11 11 9 8 13 12 14 14 15 13 17 16 18 18 19 17 20 22 23 23 21 20 17 16 20 20 21 17 19 18 22 22 23 19 25 24 26 26 27 25 29 28 30 30 31 29"
>
</MeshGeometry3D>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<SolidColorBrush
Color="Red"
Opacity="1.0"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
</Model3DGroup.Children>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
</Viewport3D>
</Grid>
</UserControl>
我正在考虑尝试其他图形库,如 opengl 或 gdi+。 如果您知道如何在 wpf 中绘制一条 3D 线,请举例说明。
无论您绘制什么,都需要对其进行细分,因为 WPF 本质上绘制的是三角形。
因此,对于 model 一条线作为一组镶嵌曲面,首先将该线视为实体,或者更具体地说,是具有小横截面的长直角棱柱。 如果你这样想这条线,你就有了一个六边形实体(包括线的两个“端盖”,如果你想要的话),你可以定义适当的三角形,WPF 会很好地渲染它。
当然有点麻烦,但绝对可行。
如果在 WPF 中有更好的方法可以做到这一点,我很想听听。
如果你想渲染你的 3D object 的网格,有人推荐Helixtoolkit插件。 但是这个附加组件中包含的“linevisual3D”非常蹩脚......
我鼓励您不要考虑 3D 棱镜(如 SlimsGhost 所说),而是考虑 2D 矩形,然后使用背面材料属性使其双向可见。 我已经编写了这个并且它工作得很好(比 Helix Linevisual3D 更好)
PS:如果这真的引起了兴趣,我可以在另一个专用线程中发布该方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.