2012-04-03 6 views
2

Ich versuche, nur die Kanten oder Seiten eines rechteckigen Würfels zu zeichnen und anzuzeigen, aber immer noch keinen Erfolg mit WPF. Es ist in einem Benutzersteuerelement, das ich in einer Windows-Formularanwendung (C#) anzeigen möchte. Wie ich gesehen habe, werden 3D-Objekte in WPF mit Dreiecken erstellt, also habe ich versucht, die Linien mit Rechtecken zu zeichnen, wo die Breite des Rechtecks ​​klein ist (genug, um als Kante oder Seite des Würfels erkannt zu werden), aber es wird nicht angezeigt korrekt. hier ist der Code, den ich verwende:Ich versuche, die Kanten eines rechteckigen Würfels in WPF zu zeichnen, aber nicht erfolgreich

<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> 

Ich bin Denken + andere Grafikbibliotheken wie OpenGL oder GDI versuchen. Wenn Sie wissen, wie man eine 3D-Linie in wpf zeichnet, dann demonstrieren Sie bitte mit einem Beispiel. Jede Hilfe wird geschätzt. Danke im Voraus.

+0

Ein rechteckiger Würfel? Meinst du ein rechteckiges Prisma? – bouvierr

+0

Versuchen Sie, ein Drahtmodell des Objekts zu zeichnen? – ChrisF

+0

Ich habe den Beitrag bearbeitet. Nur die Kanten oder Seiten des Objekts, das ich sehen möchte. Ich möchte kein vollständiges Objekt zeichnen oder wo die Gesichter sichtbar sind, nur die Ränder oder die Kanten/Seiten des Objekts. – mj1261829

Antwort

0

Was auch immer Sie zeichnen, es muss tesselliert werden, da WPF im Wesentlichen Dreiecke zeichnet.

Um eine Linie als eine Reihe von tessellierten Oberflächen zu modellieren, denken Sie zunächst an die Linie als solid, oder genauer gesagt, ein langes rechteckiges Prisma mit einem kleinen Querschnitt. Wenn Sie von der Linie auf diese Weise denken, Sie haben einen sechsseitigen Feststoff (einschließlich der beiden „Endkappen“ der Linie, auch wenn Sie sie wollen), und Sie können die entsprechenden Dreiecke definieren und WPF rendert es einfach gut.

Ein wenig umständlich für sicher, aber auf jeden Fall machbar.

Wenn es ein besserer Weg gibt, diese in WPF zu tun, würde ich gerne davon hören.

Viel Glück!

0

Wenn Sie das Netz Ihres 3D-Objekt zu machen, recomand einige der Helixtoolkit auf hinzufügen. Aber die „linevisual3D“ enthielt in diesem Add-on ist ziemlich lahm ... ich Sie ermutigen, nicht zu denken, auf 3D-Prismen (wie SlimsGhost sagte), sondern als 2D-Rechtecke und dann backmaterial Eigenschaften USIG es in beide Richtungen sichtbar zu machen. Ich habe diese codiert und es funktioniert sehr fein (besser als Helix Linevisual3D)

Ich wollte ein Bild hinzufügen, aber ich kann nicht, da ich nicht die „10 Rufpunkte“ ^^:

PS: Wenn das wirklich Interesse weckt, kann ich die Methode in einem anderen dedizierten Thread posten.

Mit freundlichen Grüßen