Disegnare linee in una scena 3D WPF

di Cristian Civera, in Windows Presentation Foundation,

Nello script #129 si è visto come è possibile, facendo uso della libreria 3DTools, ruotare la camera di una scena 3D semplicemente agendo con il mouse.

Nella stessa libreria è presenta una classe ScreenSpaceLines3D, che eredita da ModelVisual3D, il cui scopo è disegnare una linea piana nella scena 3D. Essa risulta molto utile soprattutto in fase di debug e di disegno, perché permette di tracciare ed evidenziare linee nello spazio e utilizzarle come punto di riferimento per valutare le altre mesh o rendersi conto della posizione della camera.

In questo script si mostra per esempio come tracciare tre linee parallele agli assi delle X, Y e Z tutte intersecanti sull'origine 0,0,0.

<Window x:Class="Camera.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:t="clr-namespace:_3DTools;assembly=3DTools" 
    Height="800" 
    Width="700"> 
 
    <Viewport3D> 
      <Viewport3D.Camera> 
        <!-- camera --> 
        <PerspectiveCamera x:Name="camera" 
                           NearPlaneDistance="0" 
                           FieldOfView="45" 
                           Position="0,0,4" 
                           LookDirection="0,0,-1" /> 
      </Viewport3D.Camera> 
 
      <ModelVisual3D> 
        <ModelVisual3D.Content> 
          <Model3DGroup> 
            <!-- luce bianca --> 
            <AmbientLight Color="#FFFFFFFF" /> 
 
            <GeometryModel3D> 
              <GeometryModel3D.Geometry> 
                <MeshGeometry3D Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0" 
                                TextureCoordinates="0,0 0,1 1,1 1,0" 
                                TriangleIndices="0 1 2 0 2 3" /> 
              </GeometryModel3D.Geometry> 
 
              <GeometryModel3D.Material> 
                <!-- foto usata come material --> 
                <DiffuseMaterial> 
                  <DiffuseMaterial.Brush> 
                    <ImageBrush ImageSource="foto.jpg" /> 
                  </DiffuseMaterial.Brush> 
                </DiffuseMaterial> 
              </GeometryModel3D.Material> 
            </GeometryModel3D> 
 
          </Model3DGroup> 
        </ModelVisual3D.Content> 
 
        <!-- Linee 3D -->
        <t:ScreenSpaceLines3D Color="Blue" 
                              Points="0,0,-2 0,0,2"
                              Thickness="3" />
        <t:ScreenSpaceLines3D Color="Red"
                              Points="0,-2,0 0,2,0"
                              Thickness="3" />
        <t:ScreenSpaceLines3D Color="Green"
                              Points="-2,0,0 2,0,0"
                              Thickness="3" />
      </ModelVisual3D> 
    </Viewport3D> 
</Window>

Non si deve far altro che specificare il colore della linea, lo spessore con Thickness e i punti della linea (almeno due). Nell'esempio si tracciano linee che vanno da -2 a +2 sul rispettivo asse. Poiché la foto è centrata in relazione all'origine è possibile vedere dall'immagine il risultato che si ottiene ruotando la camera.


Progetto CodePlex:
http://3dtools.codeplex.com/

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi