<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>3D</title>
        <link>http://blogs.ugidotnet.org/leonardo/category/3D.aspx</link>
        <description>3D</description>
        <language>it</language>
        <copyright>Leonardo</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>WPF e il 3D (ottava parte) &amp;ndash; Cubo multi-texture da codice</title>
            <link>http://blogs.ugidotnet.org/leonardo/archive/2010/04/02/wpf-e-il-3d-ottava-parte-cubo-multi-texture-codice.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;Indice degli articoli su WPF e il 3D&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nel &lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2010/02/19/wpf-e-il-3d-settima-parte-cubo-multi-texture.aspx"&gt;precedente articolo&lt;/a&gt; abbiamo visto come creare un cubo multi-texture (ovvero con materiali diversi su ogni faccia) utilizzando esclusivamente XAML, il risultato era un codice abbastanza prolisso e poco riutilizzabile. Realizziamo ora un componente che sia &lt;strong&gt;semplice&lt;/strong&gt; da utilizzare, alla fine dovremmo poter scrivere solamente il seguente codice XAML:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="xamlCode" border="0" alt="xamlCode" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DottavaparteCubomultitexturedacod_148F8/xamlCode_c6058ba6-ee17-4a7e-a5e0-44e2236f4908.png" width="545" height="134" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;NB: Per poter aggiungere alle proprietà il supporto al Binding dobbiamo utilizzare nel componente le Dependency Property&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Il MultiTexturedCube essendo un oggetto 3D per poter essere visualizzato dovrà essere inserito tra i &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.controls.viewport3d.children.aspx"&gt;Children&lt;/a&gt; (di tipo &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.visual3d.aspx"&gt;Visual3D&lt;/a&gt;) di un &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.controls.viewport3d.aspx"&gt;ViewPort3D&lt;/a&gt;, deriviamo quindi da &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.modelvisual3d.aspx"&gt;ModelVisual3D&lt;/a&gt; il nostro componente.&lt;/p&gt;  &lt;p&gt;Il nostro componente avrà necessità di sapere come costruire il cubo quindi dovrà contenere i modelli 3D (&lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.geometrymodel3d.aspx"&gt;GeometryModel3D&lt;/a&gt;) delle facce del cubo da visualizzare. I  modelli come visto nei precedenti articoli avranno una geometria che sarà inizializzata nel costruttore del componente in modo analogo a come avevamo fatto tramite XAML, ecco un esempio di codice:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DottavaparteCubomultitexturedacod_148F8/meshCode_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="meshCode" border="0" alt="meshCode" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DottavaparteCubomultitexturedacod_148F8/meshCode_thumb.png" width="550" height="133" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Infine per poter essere visualizzati assieme i modelli dovranno essere raggruppati tramite un &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.model3dgroup.aspx"&gt;Model3DGroup&lt;/a&gt; che verrà impostato nella proprietà Content del componente, ereditata da ModelVisual3D.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DottavaparteCubomultitexturedacod_148F8/Model3DGroup_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Model3DGroup" border="0" alt="Model3DGroup" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DottavaparteCubomultitexturedacod_148F8/Model3DGroup_thumb.png" width="298" height="135" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Per poter impostare il materiale da XAML creiamo le varie Dependency Property inserendo come &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.propertychangedcallback.aspx"&gt;PropertyChangedCallback&lt;/a&gt; un evento che modifichi il materiale della corrispondente faccia. Questo “giro” è necessario in quanto tramite Dependency Property non è possibile esporre la proprietà di un altro oggetto (il modello 3D) direttamente.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DottavaparteCubomultitexturedacod_148F8/DependencyProperty_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DependencyProperty" border="0" alt="DependencyProperty" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DottavaparteCubomultitexturedacod_148F8/DependencyProperty_thumb.png" width="550" height="253" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Il diagramma finale del nostro componente è il seguente:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="MultiTexturedCubeDiagram" border="0" alt="MultiTexturedCubeDiagram" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DottavaparteCubomultitexturedacod_148F8/MultiTexturedCubeDiagram_b421db6a-21ee-4713-a878-fd7f72a22e9a.png" width="464" height="419" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Riutilizzare il componente è molto semplice, è possibile creare ad esempio un dado derivando da MultiTexturedCube e assegnando nel costruttore i materiali contenenti i numeri del dado, in questo modo non sarà neppure necessario specificare tutti i materiali di volta in volta. Non è difficile neppure estendere il componente, continuando l’esempio del dado è possibile aggiungere la proprietà Numero che una volta impostata applica un’animazione alla proprietà Trasform che ruota il dado con il numero scelto verso l’alto.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-7996fa031700f3fe.skydrive.live.com/self.aspx/Pubblica/WPFMultiTexturedCube3D-2.zip"&gt;Scarica il codice sorgente dell’articolo&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;NB: Nel codice dell’articolo è presente solamente il codice per una singola faccia ove è analogo per le rimanenti facce.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/leonardo/aggbug/98302.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Leonardo</dc:creator>
            <guid>http://blogs.ugidotnet.org/leonardo/archive/2010/04/02/wpf-e-il-3d-ottava-parte-cubo-multi-texture-codice.aspx</guid>
            <pubDate>Fri, 02 Apr 2010 01:54:34 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/leonardo/archive/2010/04/02/wpf-e-il-3d-ottava-parte-cubo-multi-texture-codice.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/leonardo/comments/commentRss/98302.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/leonardo/services/trackbacks/98302.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF e il 3D (settima parte) &amp;ndash; Cubo multi-texture</title>
            <link>http://blogs.ugidotnet.org/leonardo/archive/2010/02/19/wpf-e-il-3d-settima-parte-cubo-multi-texture.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;Indice degli articoli su WPF e il 3D&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nel &lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2009/06/22/wpf-e-il-3d-sesta-parte.aspx"&gt;precedente articolo&lt;/a&gt; abbiamo visto come colorare un oggetto 3D ed abbiamo trattato le problematiche di mappatura con oggetti 2D chiamati texture.&lt;/p&gt;  &lt;p&gt;In questo articolo prendiamo invece in considerazione l’applicazione di più materiali, uno per faccia, ad un unico modello 3D: in questo caso un cubo che &lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2009/04/07/wpf-e-il-3d-quinta-parte.aspx"&gt;abbiamo già visto&lt;/a&gt; come creare.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Multi-textured cube" border="0" alt="Multi-textured cube" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DsettimaparteCubomultitexture_BBD2/Multi-textured%20cube_e05295a5-b25d-4f74-a94d-293b9ea0d8e7.png" width="300" height="200" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;WPF permette di associare ad ogni &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.geometrymodel3d.aspx"&gt;GeometryModel3D&lt;/a&gt; un solo materiale per la vista frontale ed un solo materiale per la vista di retro, per superare questa limitazione possiamo seguire diverse strade:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;- Creare una texture unica formata dall’unione delle varie texture e mappare ogni punto di conseguenza&lt;/strong&gt;  &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DsettimaparteCubomultitexture_BBD2/Texture_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Texture" border="0" alt="Texture" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DsettimaparteCubomultitexture_BBD2/Texture_thumb.png" width="452" height="74" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;em&gt;Esempio di texture unica per creare un effetto multi-texture&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;Questo stratagemma seppur altamente performante comporta difficoltà nel simulare materiali “dinamici” come ad esempio video o materiali con applicati dei &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.visualbrush.aspx"&gt;VisualBrush&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;- Suddividere il modello 3D in tante parti&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Questa è la soluzione che offre più flessibilità in quanto rende possibile cambiare singolarmente i vari materiali.&lt;/p&gt;  &lt;p&gt;Un esempio di cubo 3D suddiviso in più parti (suddiviso nelle 6 facce) è il seguente:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DsettimaparteCubomultitexture_BBD2/sampleXamlMultiTexturedCube_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="sampleXamlMultiTexturedCube" border="0" alt="sampleXamlMultiTexturedCube" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DsettimaparteCubomultitexture_BBD2/sampleXamlMultiTexturedCube_thumb_2.png" width="550" height="322" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Come si può notare all’interno di un singolo &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.modelvisual3d.aspx"&gt;ModelVisual3D&lt;/a&gt; (che dovrà poi essere inserito all’interno di un &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.controls.viewport3d.aspx"&gt;Viewport3D&lt;/a&gt;) è definito un &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.model3dgroup.aspx"&gt;Model3DGroup&lt;/a&gt; che contiene i vari pezzi (&lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.geometrymodel3d.aspx"&gt;GeometryModel3D&lt;/a&gt;) con applicati diversi materiali. I dati veri e propri sono inseriti all’interno della sezione Resource del ViewPort3D per questioni di compattezza e riutilizzo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DsettimaparteCubomultitexture_BBD2/Resource_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Resource" border="0" alt="Resource" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3DsettimaparteCubomultitexture_BBD2/Resource_thumb.png" width="550" height="375" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;em&gt;Una parte dei dati del cubo 3D all’interno della sezione Resource del Viewport3D&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Questa soluzione comporta però un codice Xaml molto prolisso e poco riutilizzabile, vedremo nel prossimo articolo come creare un componente altamente riutilizzabile ed estendibile ereditando dalla classe ModelVisual3D.   &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-7996fa031700f3fe.skydrive.live.com/self.aspx/Pubblica/WPFMultiTexturedCube3D.zip"&gt;Scarica il codice sorgente dell’articolo&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/leonardo/aggbug/98062.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Leonardo</dc:creator>
            <guid>http://blogs.ugidotnet.org/leonardo/archive/2010/02/19/wpf-e-il-3d-settima-parte-cubo-multi-texture.aspx</guid>
            <pubDate>Fri, 19 Feb 2010 17:32:20 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/leonardo/archive/2010/02/19/wpf-e-il-3d-settima-parte-cubo-multi-texture.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/leonardo/comments/commentRss/98062.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/leonardo/services/trackbacks/98062.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF 3D Labs</title>
            <link>http://blogs.ugidotnet.org/leonardo/archive/2009/07/05/wpf-3d-labs.aspx</link>
            <description>&lt;p&gt;Imparare la teoria del 3D è certamente interessante ma quello che serve maggiormente è la pratica.&lt;/p&gt;
&lt;p&gt;Inauguro una nuova sezione del blog che verrà mano a mano arricchita con nuovi laboratori interattivi dove sarà possibile “smanettare” concentrandosi sul 3D anziché sui dettagli. Non dovrete creare nuovi progetti o pensare a creare assi virtuali per orientarvi nel mondo 3D. Potete imparare i principi fondamentali da subito senza tanti fronzoli e direttamente dal vostro Browser! (richiede installato il .Net Framework 3.5)&lt;/p&gt;
&lt;p&gt;Ogni laboratorio contiene una piccola descrizione, un link che porta ad un articolo di approfondimento e un tutorial interattivo che spiega passo passo i concetti importanti.&lt;/p&gt;
&lt;p&gt;Buon divertimento!&lt;/p&gt;
&lt;p&gt;WPF 3D Labs (link rimosso)&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt; &lt;em&gt;Trascinando e tenendo premuto il tasto destro del mouse è possibile ingrandire/rimpicciolire la schermata 3D nel WPF 3D Labs. Col tasto sinistro è possibile invece ruotare la schermata 3D.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;u&gt;Nota&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;: Richiede il supporto applicazioni XBAP abilitato, non presente in Internet Explorer 9 o superiore per default.&lt;br /&gt;
Per abilitarlo andare su Opzioni/Sicurezza/Livello Personalizzato/Applicazioni browser XAML e scegliere Chiedi conferma&lt;/p&gt;
&lt;p align="left"&gt;&lt;img alt="" src="/images/blogs_ugidotnet_org/leonardo/security(1).png" width="513" height="457" align="middle" /&gt;&lt;/p&gt;
&lt;p&gt;All'avvio dell'applicazione XAML bisognerà confermare che si vuole eseguire l'applicazione.&lt;br /&gt;
Non compatibile con Google Chrome o le nuove versioni di Firefox.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold; font-style: italic; text-decoration: underline;"&gt;UPDATE 2023&lt;/span&gt;: Gli attuali browser non supportano piu' le applicazioni XBAP, potete pero' adesso scaricare il codice sorgente a questo &lt;a href="https://1drv.ms/u/s!Av7zABcD-pZ5hLhEjWUjy9llGd7kbQ?e=xu07Pl"&gt;link&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/leonardo/aggbug/96612.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Leonardo</dc:creator>
            <guid>http://blogs.ugidotnet.org/leonardo/archive/2009/07/05/wpf-3d-labs.aspx</guid>
            <pubDate>Sun, 05 Jul 2009 22:23:36 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/leonardo/archive/2009/07/05/wpf-3d-labs.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/leonardo/comments/commentRss/96612.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/leonardo/services/trackbacks/96612.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF e il 3D (sesta parte)</title>
            <link>http://blogs.ugidotnet.org/leonardo/archive/2009/06/23/wpf-e-il-3d-sesta-parte.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;Indice degli articoli su WPF e il 3D&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;I pennelli di WPF&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Per colorare un cubo di Rosso abbiamo assegnato al nostro modello 3D (&lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2009/04/07/wpf-e-il-3d-quinta-parte.aspx"&gt;creato in precedenza&lt;/a&gt;) il materiale &lt;strong&gt;DiffuseMaterial&lt;/strong&gt; con la proprietà &lt;strong&gt;Brush&lt;/strong&gt; impostata a Red tramite codice XAML.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="DiffuseMaterialBrush" border="0" alt="DiffuseMaterialBrush" width="286" height="52" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsestaparte_11381/DiffuseMaterialBrush_a2a0dc59-f12b-4de4-a7ca-f100c32e6fef.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Così facendo dietro le quinte è stato utilizzato il pennello predefinito &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.brushes.aspx"&gt;Brushes&lt;/a&gt;.Red che altro non è che un &lt;strong&gt;Brush&lt;/strong&gt; (parola che in italiano si può tradurre letteralmente in &lt;strong&gt;pennello&lt;/strong&gt;) di tipo &lt;strong&gt;SolidColorBrush&lt;/strong&gt; (colore uniforme) con la proprietà Color impostata su Red. Avremmo potuto scrivere anche il seguente codice XAML per ottenere lo stesso risultato:&lt;/p&gt;
&lt;p&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="DiffuseMaterialSolidColorBrush" border="0" alt="DiffuseMaterialSolidColorBrush" width="352" height="121" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsestaparte_11381/DiffuseMaterialSolidColorBrush_4ea8e067-7b9b-4c7c-8c2b-2504636ce76b.png" /&gt;&lt;/p&gt;
&lt;p&gt;Scrivendo il codice in quest’ultima forma è possibile sostituire il tipo &lt;strong&gt;SolidColorBrush&lt;/strong&gt; con qualsiasi pennello, vediamo quali WPF ci fornisce:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.solidcolorbrush.aspx"&gt;SolidColorBrush&lt;/a&gt; come abbiamo visto ci permette di colorare con un colore a tinta unita &lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.lineargradientbrush.aspx"&gt;LinearGradientBrush&lt;/a&gt; permette di colorare con sfumature lineari &lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.imagebrush.aspx"&gt;ImageBrush&lt;/a&gt; permette di disegnare un’immagine &lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.radialgradientbrush.aspx"&gt;RadialGradientBrush&lt;/a&gt; permette di colorare con sfumature radiali &lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.drawingbrush.aspx"&gt;DrawingBrush&lt;/a&gt; permette di disegnare un disegno 2D (o un oggetto &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.drawing.aspx"&gt;Drawing&lt;/a&gt;) &lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.visualbrush.aspx"&gt;VisualBrush&lt;/a&gt;   permette di disegnare un oggetto visualizzabile (o un oggetto &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.visual.aspx"&gt;Visual&lt;/a&gt;) &lt;br /&gt;
&lt;em&gt;I pennelli sono ordinati dal più al meno performante.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;WPF è estremamente &lt;strong&gt;coerente&lt;/strong&gt; e permette di utilizzare su oggetti sia &lt;strong&gt;2D&lt;/strong&gt; sia &lt;strong&gt;3D&lt;/strong&gt; tutti i pennelli.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsestaparte_11381/Blend_4.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Blend" border="0" alt="Blend" width="534" height="612" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsestaparte_11381/Blend_thumb_1.png" /&gt;&lt;/a&gt;  &lt;br /&gt;
&lt;em&gt;Tramite Expression Blend è possibile impostare visualmente qualsiasi pennello e vederne un anteprima applicata sull’oggetto anche se tridimensionale&lt;/em&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Coloriamo oggetti 3D coi pennelli&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;L’uso di pennelli avanzati pone il problema di &lt;strong&gt;mappare&lt;/strong&gt; eventuali immagini 2D (chiamate &lt;strong&gt;texture&lt;/strong&gt;) sulle superfici tridimensionali, per risolverlo dobbiamo inserire delle coordinate chiamate &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.meshgeometry3d.texturecoordinates.aspx"&gt;TextureCoordinates&lt;/a&gt; nelle nostre geometrie.&lt;/p&gt;
&lt;p&gt;Ad esempio il seguente pennello &lt;strong&gt;LinearGradientBrush&lt;/strong&gt; genera un gradiente dal bianco al nero passando per il rosso:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsestaparte_11381/LinearGradientBrush_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="LinearGradientBrush" border="0" alt="LinearGradientBrush" width="461" height="152" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsestaparte_11381/LinearGradientBrush_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Per colorare un cubo col gradiente di esempio oltre ad impostarlo come materiale (vedere I pennelli di WPF ad inizio articolo) dobbiamo provvedere a mappare ogni punto alle corrispondenti coordinate della &lt;strong&gt;texture&lt;/strong&gt; che come possiamo notare utilizzano il &lt;strong&gt;sistema di riferimento 2D&lt;/strong&gt;. La mappatura si concretizza tramite la proprietà &lt;strong&gt;TextureCoordinates &lt;/strong&gt;della geometria &lt;strong&gt;MeshGeometry3D&lt;/strong&gt;. &lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="238"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="200"&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsestaparte_11381/texture_4.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="texture" border="0" alt="texture" width="239" height="146" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsestaparte_11381/texture_thumb_1.png" /&gt;&lt;/a&gt;&lt;/td&gt;
            &lt;td valign="top" width="36"&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsestaparte_11381/TextureCoordinates_4.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="TextureCoordinates" border="0" alt="TextureCoordinates" width="284" height="123" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsestaparte_11381/TextureCoordinates_thumb_1.png" /&gt;&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Il codice XAML per brevità è relativo alla sola faccia centrale del cubo&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/leonardo/aggbug/96499.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Leonardo</dc:creator>
            <guid>http://blogs.ugidotnet.org/leonardo/archive/2009/06/23/wpf-e-il-3d-sesta-parte.aspx</guid>
            <pubDate>Tue, 23 Jun 2009 00:43:24 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/leonardo/archive/2009/06/23/wpf-e-il-3d-sesta-parte.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/leonardo/comments/commentRss/96499.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/leonardo/services/trackbacks/96499.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF e il 3D (quinta parte)</title>
            <link>http://blogs.ugidotnet.org/leonardo/archive/2009/04/07/wpf-e-il-3d-quinta-parte.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;Indice degli articoli su WPF e il 3D&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dopo aver acquisito manualità con triangoli e quadrati nello spazio 3D è giunto il momento di creare una geometria che renda finalmente “giustizia” al 3D, costruiremo un cubo e aggiungeremo al nostro programma la possibilità di navigare all’interno dello spazio tridimensionale ingrandendo/rimpicciolendo e ruotando la scena col mouse.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Costruiamo un Cubo&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Come visto nel precedente articolo per costruire un quadrato occorrono 2 triangoli, in un cubo sono presenti 6 quadrati (uno per ogni faccia) ma non serviranno 6x4=24 punti distinti ma solamente 8 punti visto che molti punti saranno condivisi da più facce.&lt;/p&gt;  &lt;p&gt;Di seguito uno schema dei punti essenziali necessari per costruire il nostro cubo:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Cubo" border="0" alt="Cubo" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dquintaparte_11E26/Cubo_9cd78298-b33b-4a54-b16b-69376a8dd22c.png" width="260" height="254" /&gt; &lt;/p&gt;  &lt;p&gt;Ogni faccia necessiterà di due triangoli come evidenziato nella seguente immagine:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CuboColori" border="0" alt="CuboColori" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dquintaparte_11E26/CuboColori_22368a77-e4e1-4f5d-9ad1-dfc05ffbb6ac.png" width="260" height="254" /&gt; &lt;/p&gt;  &lt;p&gt;Come per il singolo quadrato basterà inserire tutti i punti univoci nella collezione Positions e inserire gli indici per creare i triangoli desiderati uno dopo l’altro. WPF ogni 3 indici creerà un triangolo (in XNA questa modalità di disegno in cui ogni gruppo di tre vertici definisce un triangolo è detta &lt;strong&gt;TriangleList&lt;/strong&gt;).&lt;/p&gt;  &lt;p&gt;Volendo centrare la base del cubo nell’origine i punti univoci sono:&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="text-align: center" colspan="2"&gt;Positions&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="width: 20px"&gt;&lt;em&gt;0&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;(0.5, 0, 0.5)&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="width: 20px"&gt;&lt;em&gt;1&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;(0.5, 1, 0.5)&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="width: 20px"&gt;&lt;em&gt;2&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;(-0.5, 1, 0.5)&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="width: 20px"&gt;&lt;em&gt;3&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;(-0.5, 0, 0.5)&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="width: 20px"&gt;&lt;em&gt;4&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;(0.5, 0, -0.5)&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="width: 20px"&gt;&lt;em&gt;5&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;(0.5, 1, -0.5)&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="width: 20px"&gt;&lt;em&gt;6&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;(-0.5, 1, -0.5)&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="width: 20px"&gt;&lt;em&gt;7&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;( -0.5, 0, -0.5)&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Gli indici dei triangoli invece sono rappresentati dalla seguente tabella:&lt;/p&gt;  &lt;table style="width: 415px"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="text-align: center" colspan="6"&gt;TriangleIndices&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Index&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;em&gt;Index&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;em&gt;Index&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #ff0000"&gt;&lt;em&gt;0&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ff0000"&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #0066ff"&gt;&lt;em&gt;12&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #0066ff"&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #ff9999"&gt;&lt;em&gt;24&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ff9999"&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #ff0000"&gt;&lt;em&gt;1&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ff0000"&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #0066ff"&gt;&lt;em&gt;13&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #0066ff"&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #ff9999"&gt;&lt;em&gt;25&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ff9999"&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #ff0000"&gt;&lt;em&gt;2&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ff0000"&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #0066ff"&gt;&lt;em&gt;14&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #0066ff"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #ff9999"&gt;&lt;em&gt;26&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ff9999"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #ffff00"&gt;&lt;em&gt;3&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ffff00"&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #000080; color: #ffffff"&gt;&lt;em&gt;15&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #000080; color: #ffffff"&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #99ccff"&gt;&lt;em&gt;27&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #99ccff"&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #ffff00"&gt;&lt;em&gt;4&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ffff00"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #000080; color: #ffffff"&gt;&lt;em&gt;16&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #000080; color: #ffffff"&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #99ccff"&gt;&lt;em&gt;28&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #99ccff"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #ffff00"&gt;&lt;em&gt;5&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ffff00"&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #000080; color: #ffffff"&gt;&lt;em&gt;17&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #000080; color: #ffffff"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #99ccff"&gt;&lt;em&gt;29&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #99ccff"&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #008080"&gt;&lt;em&gt;6&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #008080"&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #99ff99"&gt;&lt;em&gt;18&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #99ff99"&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #ccccff"&gt;&lt;em&gt;30&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ccccff"&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #008080"&gt;&lt;em&gt;7&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #008080"&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #99ff99"&gt;&lt;em&gt;19&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #99ff99"&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #ccccff"&gt;&lt;em&gt;31&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ccccff"&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #008080"&gt;&lt;em&gt;8&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #008080"&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #99ff99"&gt;&lt;em&gt;20&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #99ff99"&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #ccccff"&gt;&lt;em&gt;32&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ccccff"&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #ff00ff"&gt;&lt;em&gt;9&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ff00ff"&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #ffff99"&gt;&lt;em&gt;21&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ffff99"&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #66ffcc"&gt;&lt;em&gt;33&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #66ffcc"&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #ff00ff"&gt;&lt;em&gt;10&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ff00ff"&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #ffff99"&gt;&lt;em&gt;22&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ffff99"&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #66ffcc"&gt;&lt;em&gt;34&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #66ffcc"&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="background-color: #ff00ff"&gt;&lt;em&gt;11&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ff00ff"&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #ffff99"&gt;&lt;em&gt;23&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #ffff99"&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;        &lt;td style="background-color: #66ffcc"&gt;&lt;em&gt;35&lt;/em&gt;&lt;/td&gt;        &lt;td style="background-color: #66ffcc"&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td colspan="6"&gt;&lt;em&gt;Ogni triangolo nella tabella ha un colore diverso e la tabella è suddivisa in 3 colonne per visualizzare i 12 triangoli necessari per rappresentare i 6 quadrati costituenti le facce del cubo&lt;/em&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Il codice XAML per creare il modello 3D (di materiale rosso) sarà dunque:&lt;/p&gt;  &lt;p&gt; &lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dquintaparte_CE58/xaml_cube_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="xaml_cube" border="0" alt="xaml_cube" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dquintaparte_CE58/xaml_cube_thumb.png" width="409" height="270" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Aggiungendo il codice al programma visto &lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2009/03/02/wpf-e-il-3d-terza-parte.aspx"&gt;negli articoli precedenti&lt;/a&gt; avremmo il nostro Cubo 3D &lt;a href="http://it.wikipedia.org/wiki/Rendering"&gt;renderizzato&lt;/a&gt; nella nostra applicazione.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Aggiungiamo il supporto alla navigazione delle nostre scene 3D&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Per rendere maggiormente accattivante la sensazione di profondità della scena è necessario aggiungere il supporto alla “personalizzazione” della telecamera da parte dell’utente per poter visualizzare come meglio crede gli oggetti 3D. Per aggiungere questa funzionalità in modo rapido ed efficace utilizzeremo la libreria open-source (creata da Microsoft) &lt;strong&gt;3D Tools for the Windows Presentation Foundation&lt;/strong&gt; che fornisce utili classi per estendere il supporto 3D di WPF.&lt;/p&gt;  &lt;p&gt;Dopo aver scaricato la libreria in formato binario dal sito CodePlex all’indirizzo &lt;a title="http://www.codeplex.com/3DTools" href="http://www.codeplex.com/3DTools"&gt;http://www.codeplex.com/3DTools&lt;/a&gt; procediamo ad aggiungere un riferimento nel file nostro progetto tramite il menù Project/Add reference/Browse e indicando il file 3DTools.dll scaricato.&lt;/p&gt;  &lt;p&gt;Per poter usare nella nostra applicazione la libreria dovremmo aggiungere un &lt;a href="http://msdn.microsoft.com/it-it/library/ms747086.aspx"&gt;namespace&lt;/a&gt; come evidenziato dalla prima riga cerchiata in rosso nel codice (sotto).     &lt;br /&gt;Per aggiungere la funzionalità di navigazione 3D basterà ora decorare il controllo ViewPort3D col TrackballDecorator fornito dai 3D Tools.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="xaml_3dtools" border="0" alt="xaml_3dtools" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dquintaparte_11E26/xaml_3dtools.png" width="558" height="221" /&gt;&lt;/p&gt;  &lt;p&gt;Il risultato è immediato e avviando l’applicazione sarà possibile ruotare il cubo tenendo premuto il tasto sinistro del mouse e ingrandire/rimpicciolire trascinando avanti e indietro il mouse tenendo il tasto destro premuto.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="3DCube" border="0" alt="3DCube" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dquintaparte_11E26/3DCube.png" width="300" height="200" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-7996fa031700f3fe.skydrive.live.com/self.aspx/Pubblica/WPFCube3D.zip"&gt;Scarica il codice sorgente dell’articolo&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Nel prossimo articolo vedremo come “dipingere” sul cubo ed entreremo nelle problematiche relative all’applicazione di più materiali ad un singolo GeometryModel3D. Queste conoscenze ci torneranno utili per colorare di diversi colori ogni faccia e costruire una riproduzione fedele del Cubo di Rubiks.&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/leonardo/aggbug/95899.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Leonardo</dc:creator>
            <guid>http://blogs.ugidotnet.org/leonardo/archive/2009/04/07/wpf-e-il-3d-quinta-parte.aspx</guid>
            <pubDate>Tue, 07 Apr 2009 23:06:32 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/leonardo/archive/2009/04/07/wpf-e-il-3d-quinta-parte.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/leonardo/comments/commentRss/95899.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/leonardo/services/trackbacks/95899.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF e il 3D (quarta parte)</title>
            <link>http://blogs.ugidotnet.org/leonardo/archive/2009/04/05/wpf-e-il-3d-quarta-parte.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;Indice degli articoli su WPF e il 3D&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2009/03/02/wpf-e-il-3d-terza-parte.aspx"&gt;Dopo aver visto&lt;/a&gt; alcuni concetti fondamentali passiamo alla costruzione di geometrie più complicate per realizzare applicazioni più interessanti.  &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Il nostro scopo finale è costruire un &lt;/em&gt;&lt;a href="http://it.wikipedia.org/wiki/Cubo_di_Rubik"&gt;&lt;em&gt;Cubo di Rubiks&lt;/em&gt;&lt;/a&gt;&lt;em&gt; che può essere visto come un insieme di 27 cubi ma abbiamo scoperto negli articoli precedenti che l’elemento base del 3D è il triangolo. Vedremo in questo articolo come costruire attraverso dei triangoli dei quadrati che ci serviranno per realizzare dei cubi con cui realizzeremo il nostro progetto.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Costruiamo un Quadrato&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Per poter creare un quadrato occorrono due triangoli (&lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2008/12/28/wpf-e-il-3d-prima-parte.aspx"&gt;come abbiamo visto&lt;/a&gt; l’elemento fondamentale della grafica 3D è il triangolo), per ogni triangolo servono 3 punti quindi in tutto dovrebbero servire 6 punti ma effettivamente i punti distinti sono solo 4  come mostrato nella seguente schematizzazione:&lt;/p&gt;
&lt;p&gt; &lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="quad" border="0" alt="quad" width="115" height="113" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dquartaparte_D601/quad_a403d232-76ce-44a2-8e78-dee40d962006.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Come possiamo allora non ripetere i punti (0,0,0) e (1,1,0) per ogni triangolo e definirli invece una sola volta risparmiando memoria?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Per fare questo basta definire tutti i punti “essenziali” in una lista (chiamata in XNA “&lt;strong&gt;Vertex Buffer&lt;/strong&gt;” mentre in WPF è rappresentata dalla proprietà &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.meshgeometry3d.positions.aspx"&gt;Positions&lt;/a&gt;) e definire i vari triangoli facendo riferimento alla posizione nella lista tramite una lista di indici (chiamata in XNA “&lt;strong&gt;Index Buffer&lt;/strong&gt;” mentre in WPF è rappresentata dalla proprietà &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.meshgeometry3d.triangleindices.aspx"&gt;TriangleIndices&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;Nella proprietà Positions, che è di fatto una collezione di punti Point3D, basterà inserire i punti univoci per tutta la geometria&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="14"&gt; &lt;/td&gt;
            &lt;td style="WIDTH: 105px" valign="top"&gt;
            &lt;p align="center"&gt;Positions  &lt;br /&gt;
            (Vertex Buffer)&lt;/p&gt;
            &lt;/td&gt;
            &lt;td valign="top" rowspan="5"&gt;
            &lt;p&gt; &lt;/p&gt;
            &lt;p&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="index" border="0" alt="index" width="115" height="113" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dquartaparte_D601/index_d1d04cda-e4a4-4ef1-bacc-4f82933e993e.png" /&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="14"&gt;0&lt;/td&gt;
            &lt;td style="WIDTH: 105px" valign="top"&gt;(0,0,0)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="14"&gt;1&lt;/td&gt;
            &lt;td style="WIDTH: 105px" valign="top"&gt;(1,0,0)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="14"&gt;2&lt;/td&gt;
            &lt;td style="WIDTH: 105px" valign="top"&gt;(1,1,0)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="14"&gt;3&lt;/td&gt;
            &lt;td style="WIDTH: 105px" valign="top"&gt;(0,1,0)&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;mentre nella proprietà TriangleIndices, che è di fatto una collezione di indici interi, bisognerà definire i triangoli veri e propri facendo riferimento alla posizione dei punti nella proprietà Positions&lt;/p&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[





.postbody table { behavior: url(#default#.POSTBODY_TABLE_WRITER_BEHAVIOR) }
.postbody td { behavior: url(#default#.POSTBODY_TD_WRITER_BEHAVIOR) }
h1, h2, h3, h4, h5, h6, p, ol, ul, pre, blockquote
{
	margin-top: 10px;
	margin-bottom: 10px;
}


.style1 {
	color: #ffffff;
	background-color: #0000ff;
}
.style2 {
	color: #ffffff;
	background-color: #ff0000;
}]]&gt;&lt;/style&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="127"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" colspan="2"&gt;
            &lt;p align="center"&gt;TriangleIndices &lt;br /&gt;
            (Index Buffer)&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="style1" valign="top" width="13"&gt;0&lt;/td&gt;
            &lt;td style="WIDTH: 99px" class="style1" valign="top"&gt;0&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="style1" valign="top" width="13"&gt;1&lt;/td&gt;
            &lt;td style="WIDTH: 99px" class="style1" valign="top"&gt;1&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="style1" valign="top" width="13"&gt;2&lt;/td&gt;
            &lt;td style="WIDTH: 99px" class="style1" valign="top"&gt;2&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="style2" valign="top" width="13"&gt;3&lt;/td&gt;
            &lt;td style="WIDTH: 99px" class="style2" valign="top"&gt;0&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="style2" valign="top" width="13"&gt;4&lt;/td&gt;
            &lt;td style="WIDTH: 99px" class="style2" valign="top"&gt;2&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="style2" valign="top" width="13"&gt;5&lt;/td&gt;
            &lt;td style="WIDTH: 99px" class="style2" valign="top"&gt;3&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Nella tabella le righe colorate in blu serviranno a definire il triangolo blu mentre quelle colorate in rosso definiranno il triangolo rosso. Definendo entrambi i triangoli si costruisce di fatto un quadrato.&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;Ricordiamo che l’ordine in cui si definiscono i punti è molto importante per via del Back-face Culling visto nella &lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2009/01/08/wpf-e-il-3d-seconda-parte.aspx"&gt;prima parte&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Adesso proviamo a mettere insieme quello che abbiamo visto tramite un po' di codice XAML:&lt;/p&gt;
&lt;p&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="GeometryModel3D" border="0" alt="GeometryModel3D" width="503" height="156" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dquartaparte_D601/GeometryModel3D.png" /&gt; &lt;/p&gt;
&lt;p&gt;Definiamo la nostra geometria all’interno di un GeometryModel3D che permette di specificare oltre alla geometria vera e propria altre proprietà come il materiale (in questo caso è stato scelto un DiffuseMaterial o materiale uniforme rosso).&lt;/p&gt;
&lt;p&gt;Inseriamo ora il nostro GeometryModel3D all’interno del contenuto del ModelVisual3D del nostro Viewport assieme ad una telecamera e ad una luce come visto nell’&lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2009/03/02/wpf-e-il-3d-terza-parte.aspx"&gt;articolo precedente&lt;/a&gt; per visualizzare il tutto.&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="546"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="544"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="XAML" border="0" alt="XAML" width="550" height="515" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dquartaparte_D601/XAML_ec5e0b1e-5dd2-4c84-bd53-24144400afb6.png" /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="544"&gt;
            &lt;p align="justify"&gt;&lt;em&gt;Aggiungendo il quarto punto e gli indici dei triangoli al programma sviluppato nella parte precedente abbiamo visualizzato un quadrato (tutto rosso poiché il Materiale della geometria 3D è impostato al colore rosso). Visual Studio 2008 permette di ottenere un anteprima in tempo reale delle geometrie descritte tramite XAML.&lt;/em&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href="http://cid-7996fa031700f3fe.skydrive.live.com/self.aspx/Pubblica/WPFQuad3D.zip"&gt;Scarica il codice sorgente dell’articolo&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/leonardo/aggbug/95881.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Leonardo</dc:creator>
            <guid>http://blogs.ugidotnet.org/leonardo/archive/2009/04/05/wpf-e-il-3d-quarta-parte.aspx</guid>
            <pubDate>Sun, 05 Apr 2009 16:05:02 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/leonardo/archive/2009/04/05/wpf-e-il-3d-quarta-parte.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/leonardo/comments/commentRss/95881.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/leonardo/services/trackbacks/95881.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF e il 3D (terza parte)</title>
            <link>http://blogs.ugidotnet.org/leonardo/archive/2009/03/02/wpf-e-il-3d-terza-parte.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;Indice degli articoli su WPF e il 3D&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2009/01/08/wpf-e-il-3d-seconda-parte.aspx"&gt;Precedentemente&lt;/a&gt; abbiamo definito i punti per costruire un triangolo, vedremo ora come visualizzarlo nella nostra applicazione.&lt;/p&gt;
&lt;p&gt; &lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="teatro_wpf" border="0" alt="teatro_wpf" width="287" height="335" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dterzaparte_F16F/teatro_wpf_020229e7-dc09-4eb1-a7c9-9fe9f98bfa1f.png" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;A teatro con.. WPF&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Come al teatro, la nostra scena tridimensionale avrà bisogno di un, seppur virtuale, palcoscenico. In WPF è rappresentato dal contenuto del controllo &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.controls.viewport3d.aspx"&gt;Viewport3D&lt;/a&gt; che rappresenta per l’appunto il nostro teatro.&lt;/p&gt;
&lt;p&gt;Se non vogliamo però che la scena resti buia dovremmo aggiungere delle luci. In WPF una luce è una classe derivante dalla classe astratta &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.light.aspx"&gt;Light&lt;/a&gt;. &lt;br /&gt;
La luce più comunemente usata è &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.ambientlight.aspx"&gt;AmbientLight&lt;/a&gt; che permette di ottenere un’illuminazione uniforme e proprio per questa caratteristica è la luce più performante e più utilizzata.&lt;/p&gt;
&lt;p&gt;Come ogni teatro che si rispetti ci vorrà un pubblico che, posizionato su qualche comoda poltrona, osservi la nostra opera. L’opera sarà “percepita” diversamente dal pubblico a seconda della posizione e della direzione in cui guarda. In WPF tutto questo si traduce in Camere, telecamere virtuali che osservano la scena da una posizione (proprietà &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.projectioncamera.position.aspx"&gt;Position&lt;/a&gt;) e in una direzione ben definita (proprietà &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.projectioncamera.lookdirection.aspx"&gt;LookDirection&lt;/a&gt;). La telecamera  più utilizzata è &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.perspectivecamera.aspx"&gt;PerspectiveCamera&lt;/a&gt; che, come dice il nome, utilizza una proiezione prospettica: gli oggetti più lontani appariranno più piccoli.&lt;/p&gt;
&lt;p&gt;Creato il nostro “teatro” non resta che riempirlo della parte più importante, gli “attori” che nel nostro caso sono modelli tridimensionali o più nello specifico oggetti derivanti dalla classe &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.visual3d.aspx"&gt;Visual3D&lt;/a&gt; come ad esempio il tipo &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.modelvisual3d.aspx"&gt;ModelVisual3D&lt;/a&gt;. (NB: tipo è utilizzato come sinonimo di classe)&lt;/p&gt;
&lt;p&gt;I nostri attori non saranno inoltre senza vestiti (nel 3D trasparenti) e indosseranno qualcosa, nel 3D “quel qualcosa” è il materiale che avranno assegnato. Il materiale serve a determinare l’aspetto che un determinato oggetto avrà tenendo conto eventualmente di parametri come la riflessione della luce. &lt;br /&gt;
Il costume più “veloce da indossare” o più performante è il materiale &lt;font face="Arial"&gt;&lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.emissivematerial.aspx"&gt;EmissiveMaterial&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Costruiamo “il teatro” in XAML&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Vediamo adesso come mettere insieme concretamente il nostro “teatro” all’interno di un’applicazione tramite codice XAML.&lt;/p&gt;
&lt;p&gt;Aggiungiamo il seguente codice dentro alla griglia “di partenza” dopo aver creato un nuovo progetto di tipo WPF in Visual Studio.&lt;/p&gt;
&lt;p&gt; &lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="ViewPort3D" border="0" alt="ViewPort3D" width="594" height="223" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dterzaparte_F16F/ViewPort3D_9c867855-e89b-4964-b421-39f2df123319.png" /&gt; &lt;/p&gt;
&lt;p&gt;Notiamo subito che l’oggetto Viewport3D permette di impostare una (e una sola) telecamera tramite l’omonima proprietà Camera.&lt;/p&gt;
&lt;p&gt;Per utilizzare una PerspectiveCamera nella posizione (0,0,5) che “miri” verso (0,0,-1), dobbiamo aggiungere quindi il seguente codice:&lt;/p&gt;
&lt;p&gt; &lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="perspectiveCamera" border="0" alt="perspectiveCamera" width="528" height="86" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dterzaparte_F16F/perspectiveCamera_420e33c4-64cc-4f90-bf43-e63acf6b177b.png" /&gt; &lt;/p&gt;
&lt;p&gt;Notiamo inoltre che il controllo incorpora due ModelVisual3D (tecnicamente incorpora vuole dire che i 2 oggetti sono componenti della proprietà &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.controls.viewport3d.children.aspx"&gt;Children&lt;/a&gt; del Viewport3D).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ma perché abbiamo bisogno di 2 modelli se dobbiamo mostrare solamente un triangolo?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;La risposta è semplice. Anche le luci, derivando da Light, derivano “implicitamente” da Model3D e vengono dunque considerate a tutti gli effetti dei modelli tridimensionali.&lt;/p&gt;
&lt;p&gt;Passiamo ora al nostro “attore”.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2009/01/08/wpf-e-il-3d-seconda-parte.aspx"&gt;Dopo aver visto&lt;/a&gt; che per definire un semplice triangolo bastano tre punti come ad esempio (1,0,0), (1,1,0) e (0,0,0), definiamo un modello di tipo &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.geometrymodel3d.aspx"&gt;GeometryModel3D&lt;/a&gt; che altro non è che un insieme di poligoni nello spazio tridimensionale rappresentati dalla proprietà &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.geometrymodel3d.geometry.aspx"&gt;Geometry&lt;/a&gt; con associato un materiale, definito attraverso la proprietà &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.geometrymodel3d.material.aspx"&gt;Material&lt;/a&gt; (ma anche BackMaterial di cui parleremo successivamente).&lt;/p&gt;
&lt;p&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="GeometryModel3D" border="0" alt="GeometryModel3D" width="459" height="136" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dterzaparte_F16F/GeometryModel3D_5227334f-b18a-4953-a5e4-3fda68e0cd2d.png" /&gt;&lt;/p&gt;
&lt;p&gt;L’insieme di poligoni nella proprietà Geometry viene rappresentato dalla classe &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.meshgeometry3d.aspx"&gt;MeshGeometry3D&lt;/a&gt; che vedremo più dettagliatamente nella prossima parte, per il momento ci basta sapere che definisce la proprietà &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.meshgeometry3d.positions.aspx"&gt;Positions&lt;/a&gt; che permette di specificare i punti del nostro oggetto tridimensionale.&lt;/p&gt;
&lt;p&gt;La proprietà Brush del materiale (è stato usato il tipo DiffuseMaterial) definisce invece il colore che dovrà avere il nostro triangolo, rosso in questo caso. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://cid-7996fa031700f3fe.skydrive.live.com/self.aspx/Pubblica/WPFTriangle3D.zip"&gt;Scarica il sorgente dell’articolo&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Abbiamo iniziato a scalfire la superficie delle potenzialità 3D di WPF che permettono di arricchire, spesso senza scrivere una linea di codice ma utilizzando una sintassi di markup simile all’Html, le nostre applicazioni di accattivanti elementi tridimensionali. Vedremo nelle prossime puntate come realizzare un Cubo di Rubiks programmabile tramite WPF.&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/leonardo/aggbug/95577.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Leonardo</dc:creator>
            <guid>http://blogs.ugidotnet.org/leonardo/archive/2009/03/02/wpf-e-il-3d-terza-parte.aspx</guid>
            <pubDate>Mon, 02 Mar 2009 01:15:07 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/leonardo/archive/2009/03/02/wpf-e-il-3d-terza-parte.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/leonardo/comments/commentRss/95577.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/leonardo/services/trackbacks/95577.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF e il 3D (seconda parte)</title>
            <link>http://blogs.ugidotnet.org/leonardo/archive/2009/01/08/wpf-e-il-3d-seconda-parte.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;Indice degli articoli su WPF e il 3D&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Prima di addentrarci nella realizzazione del nostro &lt;strong&gt;Cubo di Rubiks&lt;/strong&gt; tridimensionale diamo uno sguardo alle basi del 3D partendo dalla creazione di triangoli nello spazio con WPF.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2008/12/28/wpf-e-il-3d-prima-parte.aspx"&gt;Precedentemente&lt;/a&gt; abbiamo detto che i punti, nel sistema di coordinate 3D, sono rappresentati da strutture di tipo &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.point3d.aspx"&gt;Point3D&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Per poter utilizzare le classi e le strutture relative al 3D nel nostro codice dobbiamo assicurarci di aver definito il &lt;a href="http://msdn.microsoft.com/it-it/library/z2kcy19k(VS.80).aspx"&gt;namespace&lt;/a&gt; System.Windows.Media.Media3D tramite l’istruzione &lt;a href="http://msdn.microsoft.com/it-it/library/yh598w02(VS.80).aspx"&gt;using&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img width="283" height="16" title="usingMedia3D" style="border-width: 0px; display: inline;" alt="usingMedia3D" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsecondaparte_FAAE/usingMedia3D_758b7e93-d00f-495e-99ab-eedff62cf4dd.png" /&gt; &lt;/p&gt;
&lt;p&gt;Creare un punto e definirne le coordinate (di tipo &lt;a href="http://msdn.microsoft.com/it-it/library/678hzkk9(VS.80).aspx"&gt;double&lt;/a&gt;) è semplice grazie al &lt;a href="http://msdn.microsoft.com/it-it/library/ace5hbzh.aspx"&gt;costruttore&lt;/a&gt; della struttura Point3D:&lt;/p&gt;
&lt;p&gt;&lt;img width="459" height="39" title="new_point_code" style="border-width: 0px; display: inline;" alt="new_point_code" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsecondaparte_FAAE/new_point_code_3.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;NB: Il punto verrà solamente creato in memoria ma non sarà visualizzato&lt;/em&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Costruiamo un Triangolo&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Per poter definire un triangolo occorrono 3 punti, un insieme di punti è rappresentato dalla collezione ordinata &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.point3dcollection.aspx"&gt;Point3DCollection&lt;/a&gt; (in XNA si usano array di Vertici).&lt;/p&gt;
&lt;p&gt;Per creare un triangolo rettangolo definiamo i punti (1,0,0), (1,1,0) e (0,0,0):&lt;/p&gt;
&lt;p&gt;&lt;img width="126" height="86" title="triangle" style="border-width: 0px; display: inline;" alt="triangle" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsecondaparte_FAAE/triangle_1.png" /&gt;  &lt;/p&gt;
&lt;p&gt;E’ possibile farlo attraverso il seguente codice C#:&lt;/p&gt;
&lt;p&gt;&lt;img width="428" height="69" title="triangle_code_long" style="border-width: 0px; display: inline;" alt="triangle_code_long" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsecondaparte_FAAE/triangle_code_long_3.png" /&gt; &lt;/p&gt;
&lt;p&gt;o sfruttando una sintassi più compatta e meno prolissa è possibile scrivere:&lt;/p&gt;
&lt;p&gt; &lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsecondaparte_FAAE/triangle_code_short_2.png"&gt;&lt;img width="436" height="87" title="triangle_code_short" style="border-width: 0px; display: inline;" alt="triangle_code_short" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsecondaparte_FAAE/triangle_code_short_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;E’ possibile migliorare ulteriormente tale codice indicando nel costruttore della classe Point3DCollection la capacità iniziale corrispondente al numero dei nostri punti (in questo caso 3). Eviteremo di ridimensionare la collezione mano a mano che aggiungiamo punti rendendo più efficiente il nostro codice.&lt;/p&gt;
&lt;p&gt;&lt;img width="444" height="86" title="triangle_code_short_optimized" style="border-width: 0px; display: inline;" alt="triangle_code_short_optimized" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsecondaparte_FAAE/triangle_code_short_optimized_62d22373-fbfd-400b-bb98-616405014b19.png" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;NB: Questa piccola ottimizzazione è valida in generale per la maggior parte delle collezioni (anche per i &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/it-it/library/ms172192(VS.80).aspx"&gt;&lt;em&gt;Generics&lt;/em&gt;&lt;/a&gt;&lt;em&gt;) ed è maggiormente “tangibile” all’interno di cicli eseguiti molte volte.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;E’ anche possibile definire i punti direttamente nello &lt;a href="http://msdn.microsoft.com/it-it/library/ms752059.aspx"&gt;XAML&lt;/a&gt; (nell’esempio i punti sono definiti come &lt;a href="http://msdn.microsoft.com/it-it/library/ms750613.aspx"&gt;risorsa&lt;/a&gt; dalla chiave “triangle”)&lt;/p&gt;
&lt;p&gt;&lt;img width="589" height="18" title="triangle_xaml_resource" style="border-width: 0px; display: inline;" alt="triangle_xaml_resource" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsecondaparte_FAAE/triangle_xaml_resource_9eff58fd-a8ce-405b-88d0-f4d397472170.png" /&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;WPF e Back-face Culling&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;L’ordine di aggiunta dei punti è particolarmente importante perché permette a WPF di determinare correttamente le superfici visibili tramite il &lt;a href="http://it.wikipedia.org/wiki/Back-face_culling"&gt;Back-face culling&lt;/a&gt;. In parole povere le superfici visibili dall’osservatore (nelle immagini seguenti una telecamera) sono quelle create in senso antiorario mentre quelle create in senso orario restano nascoste.&lt;/p&gt;
&lt;p&gt;Per chiarire questi concetto proviamo ad immaginare un triangolo con scritto davanti “Front” e dietro “Back”. Creandolo in senso antiorario otterremmo il risultato aspettato e la faccia “Back” non sarà visibile dalla telecamera perché sul retro del triangolo. &lt;/p&gt;
&lt;table width="530" border="0" cellspacing="0" cellpadding="2"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td width="528" valign="top"&gt;&lt;img width="544" height="294" title="triangle_camera_front" style="border-width: 0px; display: inline;" alt="triangle_camera_front" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsecondaparte_FAAE/triangle_camera_front_14a69c07-763c-4492-88e5-19da5a0009d5.png" /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="528" valign="top"&gt;La faccia “Front” del triangolo è visibile frontalmente dalla telecamera perché creata in senso antiorario.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="528" valign="top"&gt;&lt;img width="544" height="294" title="triangle_camera_back" style="border-width: 0px; display: inline;" alt="triangle_camera_back" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/WPFeil3Dsecondaparte_FAAE/triangle_camera_back_c5b22e30-c1e4-4e74-a1cf-e460bf101440.png" /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="528" valign="top"&gt;La faccia “Back” del triangolo rappresenta il retro del triangolo e non è visibile dalla telecamera.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Creando invece il triangolo in senso orario indicheremo a WPF che la faccia con la scritta “Back” è quella frontale e quella con la scritta “Front” è quella sul retro.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;UPDATE:&lt;/em&gt;&lt;/strong&gt; E' disponibile il &lt;a href="http://www.atomwave.com/Wpf3DLabs/WPF3DLabs.xbap"&gt;laboratorio&lt;/a&gt; per questo articolo (Richiede Internet Explorer e il supporto applicazioni XBAP abilitato, per abilitarlo andare su Opzioni/Sicurezza/Livello Personalizzato/Applicazioni browser XAML e scegliere Chiedi conferma).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Vedremo nella &lt;a href="http://blogs.ugidotnet.org/leonardo/archive/2009/03/02/wpf-e-il-3d-terza-parte.aspx"&gt;prossima parte&lt;/a&gt; come visualizzare il triangolo e altri oggetti 3D nella nostra applicazione&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/leonardo/aggbug/95129.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Leonardo</dc:creator>
            <guid>http://blogs.ugidotnet.org/leonardo/archive/2009/01/08/wpf-e-il-3d-seconda-parte.aspx</guid>
            <pubDate>Thu, 08 Jan 2009 01:50:47 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/leonardo/archive/2009/01/08/wpf-e-il-3d-seconda-parte.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/leonardo/comments/commentRss/95129.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/leonardo/services/trackbacks/95129.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF e il 3D (prima parte)</title>
            <link>http://blogs.ugidotnet.org/leonardo/archive/2008/12/28/wpf-e-il-3d-prima-parte.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/leonardo/articles/wpf_3d.aspx"&gt;Indice degli articoli su WPF e il 3D&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una delle grandi novità del .NET Framework 3.0 è Windows Presentation Foundation (WPF).&lt;/p&gt;
&lt;p&gt;Inizialmente usato da pochi coraggiosi programmatori, con l'avvento del .NET Framework 3.5 e del successivo SP1 è diventato un ambiente più maturo ed  imparare ad utilizzarlo sta diventando un &lt;strong&gt;must&lt;/strong&gt; se non si vuole perdere il “treno della tecnologia”.&lt;/p&gt;
&lt;p&gt;Vedremo in questa serie di articoli come e quando utilizzare le sue capacità grafiche 3D sviluppando passo passo un &lt;strong&gt;cubo di Rubiks&lt;/strong&gt; programmabile in 3D.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Halo 4 in WPF?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Il supporto grafico 3D di WPF non è pensato per videogiochi all’ultimo grido o per altri programmi che fanno pesantemente uso di grafica tridimensionale, sebbene sia basato su DirectX e si avantaggi dell’&lt;a href="http://it.wikipedia.org/wiki/Accelerazione_tridimensionale"&gt;accelerazione grafica&lt;/a&gt; delle recenti schede video. &lt;br /&gt;
Per creare videogiochi con codice gestito (come C#) è possibile utilizzare &lt;a href="http://creators.xna.com/"&gt;XNA&lt;/a&gt;, un buon punto di partenza per impararlo è il sito &lt;a href="http://vs85team.spaces.live.com"&gt;XnaLearners&lt;/a&gt;, negli articoli saranno comunque evidenziate le differenze tra WPF e XNA per facilitare la “transizione” da un framework all’altro. &lt;br /&gt;
Con WPF è possibile creare visualizzazioni tridimensionali come &lt;strong&gt;grafici&lt;/strong&gt; e &lt;strong&gt;modelli&lt;/strong&gt; di oggetti/prodotti per rendere più usabile e accattivante il proprio programma.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;In principio furono… i triangoli!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Alla base di tutti i modelli tridimensionali (anche i più complessi) ci sono solamente triangoli. Una sfera ad esempio è formata solamente da triangoli, più triangoli ci sono e più la sfera è definita.&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="333"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="173"&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/Disegniamooggetti3Dnellenostreapplicazio_173/lowTriangles_2.gif"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="lowTriangles" border="0" alt="lowTriangles" width="185" height="185" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/Disegniamooggetti3Dnellenostreapplicazio_173/lowTriangles_thumb.gif" /&gt;&lt;/a&gt; &lt;/td&gt;
            &lt;td valign="top" width="158"&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/Disegniamooggetti3Dnellenostreapplicazio_173/highTriangles_2.gif"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="highTriangles" border="0" alt="highTriangles" width="185" height="185" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/Disegniamooggetti3Dnellenostreapplicazio_173/highTriangles_thumb.gif" /&gt;&lt;/a&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="173"&gt;Sfera con pochi triangoli&lt;/td&gt;
            &lt;td valign="top" width="158"&gt;Sfera con molti triangoli&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;NB: Esistono diverse tecniche per “far sembrare” più definito un modello composto da pochi triangoli (&lt;a href="http://en.wikipedia.org/wiki/Texture_mapping"&gt;Texture Mapping&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Bump_mapping"&gt;Bump mapping&lt;/a&gt;, etc..).&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Sistema di coordinate 3D di WPF&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Per poter definire i triangoli occorrono dei punti che hanno determinate coordinate, il sistema di riferimento per i punti nello spazio tridimensionale (a differenza del sistema di riferimento bidimensionale) è mostrato dalla seguente figura:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/Disegniamooggetti3Dnellenostreapplicazio_173/XYZ_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="XYZ" border="0" alt="XYZ" width="119" height="102" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/leonardo/WindowsLiveWriter/Disegniamooggetti3Dnellenostreapplicazio_173/XYZ_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;I punti sono formalmente oggetti di tipo &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.media.media3d.point3d.aspx"&gt;Point3D&lt;/a&gt; che contengono le coordinate X,Y e Z, in XNA i punti sono chiamati Vertici (Vertex) e possono essere rappresentati dal tipo &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector3.aspx"&gt;Vector3&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/leonardo/aggbug/95030.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Leonardo</dc:creator>
            <guid>http://blogs.ugidotnet.org/leonardo/archive/2008/12/28/wpf-e-il-3d-prima-parte.aspx</guid>
            <pubDate>Sun, 28 Dec 2008 23:30:09 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/leonardo/archive/2008/12/28/wpf-e-il-3d-prima-parte.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/leonardo/comments/commentRss/95030.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/leonardo/services/trackbacks/95030.aspx</trackback:ping>
        </item>
    </channel>
</rss>