XML  »  Guide  »  Guida VRML 

Creare oggetti complessi



Finora si sono prese in considerazione geometrie molto semplici, in particolare primitive disponibili quali: sfera, cono, cilindro, box e text.

Nella maggior parte dei casi, però, modellizzare un oggetto del mondo reale utilizzando semplici sfere, cilindri, parallelepipedi ecc. è un’impresa assai difficile e dai dubbi risultati. Per creare oggetti più complessi è necessario definire i poligoni che ne costituiscono la forma. Tale operazione, se fatta a mano, può essere molto laboriosa e complicata; basti considerare che oggetti anche non eccessivamente complicati possono facilmente contenere migliaia di poligoni. In tali casi risulta evidente la “necessità” di impiegare un tool di sviluppo 3D (ad esempio 3DstudioMax) per poi convertire il file in formato vrml. Nel nostro caso, per illustrare il procedimento utile alla realizzazione di figure non primitive direttamente in VRML, si affronterà la realizzazione di oggetti poligonali semplici.

I seguenti esempi mostrano come utilizzare i nodi IndexedLineSet e IndexedfaceSet .

Il nodo IndexedLineSet

Il seguente listato consente di disegnare le linee di un quadrato vuoto:

#VRML V2.0 utf8

# quadrato outline: uso del nodo IndexedLineSet

Shape {
appearance Appearance {
material Material { emissiveColor 1 .5 0 }
}
geometry IndexedLineSet {
coord Coordinate {
point [ 0 0 0, 0 2.5 0, 2.5 2.5 0, 2.5 0 0, 0 0 0]
}
coordIndex [ 0 1 2 3 0 ]
}
}

quadrato outline.wrl

Come si nota il nodo IndexedLineSet contiene due campi, il campo coord e il campo coordIndex. Il primo di essi descrive le coordinate dei punti di costruzione del perimetro lungo gli assi xyz. Il secondo indica il numero di vertici che compongono la figura.

Il nodo IndexedfaceSet

Il secondo listato che prenderemo in esame fa uso del nodo IndexedfaceSet, grazie ad esso si realizzerà una piramide:

#VRML V2.0 utf8

# piramide: uso del nodo IndexedfaceSet

Shape {
appearance Appearance {
material Material { emissiveColor .8 0.2 0 }
}
geometry IndexedfaceSet {
coord Coordinate {
point [
-1 0 1, 1 0 1, 1 0 -1, -1 0 -1, 0 1 0
]
}
coordIndex [
0, 3, 2, 1, -1
0, 1, 4, -1
1, 2, 4, -1
2, 3, 4, -1
3, 0, 4, -1
]
}
}

piramide.wrl

Come si può vedere i campi del nodo IndexedfaceSet sono gli stessi dell’esempio precedente e lavorano nello stesso modo.

In pratica: nel campo coord si sono indicate le coordinate dei quattro punti che costituiscono i vertici del quadrato di base più le coordinate del punto che costituisce l’apice della piramide. Si noti che questi punti possono essere individuati con un numero assegnato in base alla posizione che occupano nella lista: la prima tripletta sarà individuata dal numero 0, la seconda dall’ 1, e così via.

Definiti i vertici, si è proceduto ad indicare quali sono le facce che costituiscono l'oggetto. Nel campo coordIndex, infatti, si è descritta la sequenza di costruzione delle varie facce componenti la piramide: prima la base quadrata, poi le singole facce triangolari. Per fare ciò si è utilizzata l’indicizzazione numerica sopra descritta: la costruzione del quadrato di base, per esempio, si realizza unendo i punti descritti dalla prima tripletta (individuata dal numero 0), dalla terza (3), dalla seconda (2) e dalla prima (1), per concludere con il numero

-1 che indica la chiusura di una faccia del poligono.

L'ordine con cui si riportano i vertici non è casuale, ed è anzi essenziale per la corretta visualizzazione dell’oggetto. I vertici di una faccia vanno riportati in modo tale che ogni faccia visibile abbia i vertici listati seguendo il senso antiorario. Diversamenete la faccia non verrà visualizzata. Ciò deriva dal fatto che tale genere di meccanismo consente al browser di non doversi preoccupare delle facce non visibili e quindi di non dover procedere al loro rendering, a tutto vantaggio della velocità di resa della scena.

Ultimi articoli XML

Open Graph Protocol, Facebook e il Web Semantico

Come sfruttare il Web Semantico "made in Facebook"

Introduzione a RDFa - 2

Arricchire un documento HTML con metadati semantici presi dal...

Introduzione a RDFa

Cos'è e a cosa serve il linguaggio che potrebbe aprire il campo alle...

Usare SVG per creare sfondi flessibili, scalabili e divertenti

Scopriamo cos'è il formato SVG e come possiamo usarlo in modo...

Visualizzare i metadati RDF Dublin core con le trasformazioni XSL

Mettere insieme XSL, XPATH e le definizioni Dublin core per...

Altri articoli

Guide XML

Guida Podcasting

Un percorso in 16 lezioni, per entrare nella filosofia del podcast...

Guida Smil 2.0

Un percorso pratico alla scoperta di SMIL: il linguaggio (XML) per...

Guida Web service

Cosa sono, a cosa servono e come si creano servizi Web, i sistemi...

Altre guide

Newsletter @XML

Ogni mese, direttamente nella tua e-mail: articoli, guide, FAQ e approfondimenti sui linguaggi della famiglia XML.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Nessun corso previsto

Nessun corso previsto