#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
-
Usare Entity Framework con ADO.NET Data Services
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
MetadataDiffViewer: differenze tra i framework
-
Interoperabilità con WCF: invocare servizi da PHP e Flash
-
#165 - Personalizzare l'installazione di applicazioni ClickOnce
-
#151 - Disabilitare Aero programmaticamente per incrementare le performance di WPF
-
#vs 2010 e #netfx 4 beta 2 live su MSDN downloads http://u.aspitalia.com/br Info su http://u.aspitalia.com/bq
-
Uso del designer di VS 2008 con Entity Framework
-
Real Code Day 4.0: Agenda (quasi) completata!
-
#122 - Ricercare nodi su più livelli in una struttura XML utilizzando LINQ to XML
-
Disponibile Microsoft Expression Studio 3
-
#149 - Personalizzare le istanze di un servizio WCF

















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