Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

DisplayObject3D, risoluzione e materiali sugli oggetti

Esaminiamo la classe base per i modelli 3D e altri aspetti legati al rendering degli oggetti
Esaminiamo la classe base per i modelli 3D e altri aspetti legati al rendering degli oggetti
Link copiato negli appunti

Una volta impostata la scena e la camera abbiamo bisogno di un contenitore generico che possegga i metodi classici per inserire gli oggetti nel nostro mondo. Questo viene chiamato DisplayObject3D e, al pari del suo similare bidimensionale, gestisce tutte le funzionalitàà di base per spostare, traslare e ruotare un oggetto. Lo possiamo trovare nel package org.papervision3d.objects.

Il costruttore di DisplayObject3D

public function DisplayObject3D( name:String, 
                                 geometry:GeometryObject3D,
                                 initObject:Object)
Parametro Tipo Val. default Descrizione
name String null Nome dell'oggetto
geometry GeometryObject3D null Definizione geometrica di un modello: punti, facce, materiali, etc.
initObject Object null Un oggetto che può essere utile per definire proprietà aggiuntive

Non è molto frequente istanziare variabili DisplayObject3D, possiamo considerarlo alla stregua di un movieclip vuoto. Può essere utile ad esempio per stabilire il target della telecamera.

Eccone le principali proprietà:

Proprietà Descrizione
container fa riferimento alla viewport che contiene l'oggetto
parentContainer l'oggetto contenitore
x, y e z per i movimenti nello spazio
rotationX, rotationY e rotationZ per ruotare l'angolazione
scale, scaleX, scaleY, scaleZ per ridimensionare l'oggetto
visible rende visibile o invisibile un oggetto
parent ritorna l'oggetto contenitore (DisplayObjectContainer3D)

Tra i metodi a disposizione abbiamo:

Metodo Descrizione
addGeometry(GeometryObject3D) aggiunge una definizione di geometria all'istanza
copyPosition() copia le coordinate dell'oggetto
copyTransform() copia le trasformazioni applicate all'oggetto
distanceTo(DisplayObject3D):Number calcola la distanza dell'oggetto a
hitTestObject(DisplayObject3D) verifica la collisione con un altro oggetto
lookAt(DisplayObject3D) vincola la rotazione nella direzione di un altro oggetto
moveBackward(Number), moveDown(Number),
moveForward(Number), moveLeft(Number),moveRight(Number)
muove l'oggetto in funzione alla sua direzione
pitch(Number), yaw(Number) ruota l'oggetto
translate() trasla l'oggetto

tra i metodi estesi da DisplayObjectContainer3D abbiamo:

Metodo Descrizione
addChild(DisplayObject3D) aggiunge aggiunge un oggetto come figlio
removeChild(DisplayObject3D) rimuove un oggetto figlio

In genere risulta più funzionale usare le classi che estendono DisplayObject3D e che ne rendono più facilmente fruibile la gestione, come le primitive e le classi per importare modelli, tutte racchiuse sempre nel package objects.

Aggiungere un oggetto alla scena

Facciamo un esempio: se vogliamo inserire un cubo nella nostra scena, dobbiamo prima impostare la scena, poi creare un'istanza del cubo (che estende DisplayObjects3D) ed invine inserire il cubo nella scena tramite addChild.

var scena = new Scene3D();
var solido:Cube = new Cube( new MaterialsList({all:new ColorMaterial(0x333333)}), 
                            100, 100, 100);
     
scena.addChild(solido);

Oggetti materiali e risoluzione 3D

PaperVision3D ci mette a disposizione alcune "primitive", sono modelli già pronti dei più comuni solidi regolari come il cubo, la sfera, etc. Ne osserveremo le caratteristiche più avanti con maggior dettaglio.

Per ora soffermiamoci alla creazione di un parallelepipedo, possiamo definirne uno decidendone il materiale (per l'esattezza un MaterialsList) e le dimensioni (larghezza, profondità e altezza). Oltra a ciò possiamo definire la "risouzione", ovvero il livello di dettaglio con il quale l'oggetto sarà modellato e quindi reso.

In questo come in altri casi, si stabilisce il numero di facce le superfici, definendo per ciascun asse il numero di segmenti di cui è composto. Questa caratteristica si rivela molto importante soprattutto quando lavoriamo con le ombre, come vedremo più avanti.

Cube(materials:MaterialsList, 
     width:Number = 500, depth:Number = 500, height:Number = 500, 
     segmentsS:int = 1, segmentsT:int = 1, segmentsH:int = 1, 
     insideFaces:int = 0, 
     excludeFaces:int = 0)

Infine vediamo che possiamo impostare la visibilità delle facce interne e quali sono escluse.

L'unico altro metodo della classe cube è destroy(). Le proprietà fanno invece riferimento ai vari lati del cubo (ALL, BACK, BOTTOM, FRONT, LEFT, NONE, RIGHT, TOP).

Ti consigliamo anche