EL sistema de coordenadas del universo en Java3D se representa
según un sistema cartesiano, que sigue la "regla de la mano derecha",
como se observa en el siguiente diagrama:
Una instancia del objeto Shape3D define un objeto visual. La clase
Shape3D es una subclase de la clase Leaf, luego, solamente puede estar
presente en el grafo, como una hoja.
El objeto Shape3D no tiene información sobre la forma o el color
del objeto, peor puede referenciar un Nodo Componente Geometry y un
Nodo Componente Appearance. Los Nodos Componentes Gemoetry permiten
definir la geometría de la figura, y los Nodo Componentes Appearance
sirven para definir las características de la apariencia del
objeto. En el grafo, esto se representa:
Para crear los objetos, es útil crear una clase para definir las
características del objeto visual. El patrón general es:
public class VisualObject extends Shape3D{ private Geometry voGeometry; private Appearance voAppearance; // create Shape3D with geometry and appearance // the geometry is created in method createGeometry // the appearance is created in method createAppearance public VisualObject() { voGeometry = createGeometry(); voAppearance = createAppearance(); this.setGeometry(voGeometry); this.setAppearance(voAppearance); } private Geometry createGeometry() { // code to create default geometry of visual object } private Appearance createAppearance () { // code to create default appearance of visual object } } // end of class VisualObject
Después, este objeto puede ser agregado a un nodo:
objRoot.addChild (new VisualObject());
Con esto, es posible definir figuras geométricas
específicas, según las necesidades del usuario.
Figuras Utiles
En Java3D también existen clases de objetos gráficos que
permiten generar figuras geométricas primitivas. En estas primitivas,
no se puede modificar la geometría de la figura, pero
sí es posible modificar la apariencia y su tamaño.
Las figuras geométricas primitivas son:
Sus constructores son:
Todos estos objetos tienen en común, entre otros, el
método:
que permite definir la apariencia de la figura, haciendo referencia a otro Nodo Componente Appearance.void setAppearance (Appearance ap)
El grafo se vería como:
public class ConeYoyo{ private BranchGroup yoyoBG; // create Shape3D with geometry and appearance public ConeYoyo() { yoyoBG = new BranchGroup(); Transform3D rotate = new Transform3D(); Transform3D translate = new Transform3D(); Appearance yoyoAppear = new Appearance(); rotate.rotZ(Math.PI/2.0d); TransformGroup yoyoTGR1 = new TransformGroup(rotate); translate.set(new Vector3f(0.1f, 0.0f, 0.0f)); TransformGroup yoyoTGT1 = new TransformGroup(translate); Cone cone1 = new Cone(0.6f, 0.2f); cone1.setAppearance(yoyoAppear); yoyoBG.addChild(yoyoTGT1); yoyoTGT1.addChild(yoyoTGR1); yoyoTGR1.addChild(cone1); translate.set(new Vector3f(-0.1f, 0.0f, 0.0f)); TransformGroup yoyoTGT2 = new TransformGroup(translate); rotate.rotZ(-Math.PI/2.0d); TransformGroup yoyoTGR2 = new TransformGroup(rotate); Cone cone2 = new Cone(0.6f, 0.2f); cone2.setAppearance(yoyoAppear); yoyoBG.addChild(yoyoTGT2); yoyoTGT2.addChild(yoyoTGR2); yoyoTGR2.addChild(cone2); yoyoBG.compile(); } // end of ConeYoyo constructor public BranchGroup getBG(){ return yoyoBG; } } // end of class ConeYoyo
Es una clase abstracta que permite definir puntos, líneas y
polígonos (triángulos y cuadriláteros). Entre las
clases que extienden a GeometryArray están:
Sus constructores son:
vertexCount es la cantidad de vértices que conforman la
figura, y vertexFormat es un conjunto de flags que determinan ciertas
características de la figura.
Después de crear el objeto, es necesario empezar a llenarlo con la
información de las coordenadas de sus vértices.
La clase GeometryStripArray es una clase abstracta, de la cual se derivan
varias clases que permiten reusar los vértices definidos. Estas
subclases son:
Los objetos de Shape3D, así como referencian Nodos Componentes de
Geometry, también pueden referenciar Nodos Componentes de Appearance.
Al referenciar a los nodos de Appearance, permiten describir como se "ven"
los objetos. Además permite que varios objetos de Shape3D referencien
al mismo nodo Appearance, haciendo que los objetos de "vean" similares.
Los nodos de Appearance pueden referenciar a varios tipos de Nodos
Componentes como:
Para estos nodos, se utilizan los siguientes constructores:
Al definir el Nodo Appearance, se determina las características de apariencia que va a tener el objeto que hace referencia al nodo.