#129 - Ruotare la camera di una scena 3D di WPF con il mouse
di Cristian Civera, in Windows Presentation Foundation, 19 giugno 2009
Archiviato in:
.NET Framework, .NET Framework 3.0, .NET Framework 3.5, Windows Presentation Foundation, XAML
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/
Approfondimenti
-
Disponibile il Silverlight Toolkit March 2009 Release
-
Mostrare la WebCam in Silverlight
-
#149 - Personalizzare le istanze di un servizio WCF
-
Disabilitare tutti i web control in una pagina?
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
Comunicazione TCP tra Silverlight e WPF
-
#66 - ListBox style per Silverlight 3.0
-
#45 - Comunicazione tra oggetti Silverlight nella stessa pagina
-
#113 - Implementare il pattern Dispose del .NET Framework
-
#115 - Creare file ZIP con System.IO.Packaging
-
#137 - Utilizzare i Glyphs per migliorare le performance in WPF
-
#51 - Blue Style ComboBox per Silverlight 2.0

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.