Ruotare la camera di una scena 3D di WPF con il mouse

di , in Windows Presentation Foundation,

Windows Presentation Foundation tra le sue tante potenzialità ha una serie di buoni strumenti per visualizzare scene tridimensionali con i tipici e minimi elementi: mesh, geometrie, luci e camera. Una funzionalità spesso richiesta, dato l'impiego di una scena 3D, è quella di poter gestire la camera in modo da muovere le mesh sulle quali essa è focalizzata in modo da ruotare o zoomare su di esse.

La PerspectiveCamera dispone per questo scopo delle proprietà Position e LookDirection rispettivamente per indicare la posizione e il vettore di direzione dello "sguardo" della camera. Grazie al team di WPF, su CodePlex.com è disponibile un componente di nome 3DTools che include alcune classi per aggiungere funzionalità al reparto 3D. Tra queste si trova l'elemento TrackballDecorator il quale permette di decorare una scena 3D e di gestire la camera attraverso l'uso del mouse.

Premendo con il pulsante sinistro e muovendo il mouse si ottiene la rotazione, in base alla zona di pressione, della camera, mentre con il pulsante destro si lavora sullo zoom della stessa.
Il codice seguente è un esempio completo di scena 3D con manipolazione di una mesh piana.

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

  <t:TrackballDecorator>
    <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>

      </ModelVisual3D>
    </Viewport3D>
  </t:TrackballDecorator>
</Window>

Il codice produce il seguente risultato:

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

Commenti

Visualizza/aggiungi commenti

Ruotare la camera di una scena 3D di WPF con il mouse (#129)
| Condividi su: Twitter, Facebook, LinkedIn, Google+

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