AVALON Viewport3D

di Marco Leoncini, in WPF,

nel precedente post eravamo rimasti al sistema di coordinate, è il momento di aprire la finestra sulla terza dimensione, e la chiave per farlo (oggi sono particolarmente poetico) è la classe Viewport3D (namespaces System.Windows.Controls).
senza analizzire nel dettaglio proprietà e metodi andiamo al sodo, e nel nostro file XAML, aggiungiamo:

<Viewport3D>
...
</Viewport3D> 


Viewort3D è un controllo al pari (si fa per dire) di una DropDownList, e senza elementi al suo interno serve a ben poco :)
andiamo a vedere in dettaglio alcune proproetà del controllo in particolare Viewport3D.Camera e Viewport3D.Models, come lascia intuire il nome, Camera imposta la telecamera con la quale la nostra scena verrà ripresa, le proprietà della telecamera al pari di qualsiasi altro oggetto in Avalon può essere animata (lo vedremo più avanti, molto più avanti :)), attualmente sono disponibili PerspectiveCamera, MatrixCamera e ProjectionCamera ma queste di quì alla versione finale potrebbero cambiare (se non ricordo male una di queste telecamete ha già di fatto cambiato nome :)).
Viewport3D.Models è il contenitore per gli oggetti, siano questi piani, cubi o geometrie più complesse , dentro la collezione Models trovano posto anche le luci, decisione che trovo discutibile, ma questo forse a causa del mio passato da grafico, vedevo meglio le luci come una collezione esposta tramite una proprietà di Viewport3D al pari di Models, qualcosa come Viewport3D.Light, ma per adesso le nostre luci si trovano nella proprietà Models.

<Viewport3D>
<Viewport3d.Camera>
...
</Viewport3D.Camera>
<Viewport3d.Models>
...
</Viewport3D.Models>
</Viewport3D> 


Vediamo per prima la collezione Models, e come sono definite le Geometry3D , le proprietà cardine sono 3, Positions, che indiaca la posizione dei vertici, TriangleIndices per specificare come collegare i vertici e formare cosi una faccia, e Normals , le normali meritano un discorso particolare, ma per ora basti sapere che vengono utilizzate dal motore di rendering di Avalon (che si basa sulle Directx) per illuminare correttamente un oggetto, prendiamo per esempio la geometria di un semplice piano (un rettangolo ma 3D :))

<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D 
TriangleIndices="0 1 2 0 2 3"
Positions="5,0,-5 5,0,5 -5,0,5 -5,0,-5" >
</MeshGeometry3D> 
</GeometryModel3D.Geometry>
<GeometryModel3D> 

Position è una collezione di Point3D il primo valore è la coordinata x il secondo la y il terzo la z le varie triplette sono separate da uno spazio, abbiamo così inserito i punti nella scena, adesso come nel classico gioco da settimana enigmistica ci tocca collegarli, questo viene fatto tramite la proprietà TriangleIndices, per spiegare quella sequanza anonima di numeri ho preparato un disegnino:



i punti grossi neri sono i Point3D che abbiamo inserito, i numeri accanto rappresentano gli indici, in pratica specificando 0 1 2 coleghiamo i primi 3 vertici specificati in Positions (5,0,-5 5,0,5 -5,0,5) per formare così una faccia (in rosso) continuiamo con 0 2 3 e colleghiamo (5,0,-5 -5,0,5 -5,0,-5 ) in grassetto il vertice numero 3.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese