Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 48 di 53
  • livello principiante
Indice lezioni

Meshes e Bones, la gerarchia di un modello 3D

Caricare i modelli degli oggetti che compongono la scena e capire come sono composte le loro parti mobili
Caricare i modelli degli oggetti che compongono la scena e capire come sono composte le loro parti mobili
Link copiato negli appunti

Nel corso delle ultime lezioni abbiamo iniziato a capire che gestire in modo basilare un modello 3D non richiede particolari sforzi. Per prima cosa, dichiariamo il modello come istanza della classe Model:

Model tankModel;

Dopodiché carichiamo il modello usando il content manager (ricordatevi di aggiungere il vostro modello 3D al progetto Content):

tankModel = content.Load("tank");

Infine, disegnamo il modello utilizzando il metodo Draw esposto dalla classe Model, passandogli come parametri le matrici World, View e Projection:

tankModel.Draw(world, view, projection);

Gerarchia del modello

I modelli 3D sono oggetti complessi e articolati. Nonostante XNA ci permetta (per semplificarci le cose) di vedere il modello come un unico oggetto "monolitico", il modello è in realtá rappresentato come una gerarchia di componenti legate da una relazione di contenimento il cui scopo è indicare come il movimento di una parte si propaghi o influenzi il movimento delle altre.

Se pensiamo ad esempio ad una rappresentazione 3D di un corpo umano, il relativo modello sarà formato da una molteplicità di componenti più semplici, come testa, tronco e arti, i quali a loro volta potranno essere a loro volta "scomposti" in parti ancora più elementari.

Lo scopo della gerarchia è quello di poter animare singole parti del modello in modo "naturale". Il perché si usi una gerarchia, invece, ad esempio, di una semplice lista di componenti, è presto detto.

Consideriamo il nostro modello di carro armato: quando ruotiamo la torretta vogliamo che anche il cannone e la botola (gerarchicamente dipendenti dalla prima) ruotino assieme alla torretta. Allo stesso modo, se muoviamo il carro, occorre che anche le ruote si muovano assieme al resto, e così via. La struttura gerarchica consente appunto di applicare lo stesso tipo di trasformazione che vogliamo applicare ad un "nodo" anche ai nodi gerarchicamente inferiori, in modo da avere un'animazione coerente di tutto il modello.

Dal punto di vista strutturale, un modello è una serie di meshes, che rappresentano le parti disegnabili di un modello, e di bones, che rappresentano la gerarchia delle varie componenti (ossia come le diverse parti del modello si relazionano tra loro).

Ogni mesh è divisa ulteriormente in meshparts. Tutte le meshparts di una mesh condividono la stessa geometria (lo stesso vertex buffer), ma ciascuna é associata a un certo effect per poter essere disegnata diversamente dalle altre (ad esempio perché nel modello alcune mesh contengono parti trasparenti e altre opache). Ciascuna mesh contiene anche un puntatore al bone che indica la sua posizione nella gerarchia, come vediamo anche in figura:

Figura 1. La gerarchia di un modello
La gerarchia di un modello

Ti consigliamo anche