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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.