尝试在WPF中绘制矩形立方体的边缘但不成功

时间:2012-04-03 22:11:00

标签: c# wpf 3d line edge

我试图仅绘制和显示矩形立方体的边缘或边,但使用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线,请举例说明。任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

无论你绘制什么,都需要进行细分,因为WPF基本上是绘制三角形。

因此,要将线条建模为一组曲面细分曲面,首先要将线条视为实体,或者更具体地说,将长线矩形棱镜视为具有较小的横截面。如果您以这种方式考虑这条线,那么您有一个六边形的实体(包括该线的两个“端盖”,如果您甚至想要它们),并且您可以定义适当的三角形,WPF将渲染它就好了。

确实有点麻烦,但绝对可行。

如果在WPF中有更好的方法可以做到这一点,我很乐意听到它。

祝你好运!