Hay dos partes básicas para simular sombras:

calcular donde estan las sombras o crear alguna figura geometrica que sirva como tal.

Un polígono sin especificar las propiedades del material puede ser usado como una sombra de polígono, una sombre de color llamado poligono.

En este ejemplo vamos a ver como simular la sombra con poligono sombra

// Definimos una clase poligono sombra

public class Sombra extends Shape3D {

Sombra(GeometryArray geoAr, Vector3f direccion, Color3f color,

float height) {

int vCount = geoAr.getVertexCount();

QuadArray poligono = new QuadArray(vCount, GeometryArray.COORDINATES

| GeometryArray.COLOR_3);

int k;

Point3f vertice = new Point3f();

Point3f shadow = new Point3f();

for (k = 0; k < vCount; k++) {

geoAr.getCoordinate(k, vertice);

shadow.set(vertice.x + (vertice.y – height) * direccion.x,

height + 0.0001f, vertice.z +

(vertice.y – height) * direccion.y);

poligono.setCoordinate(k, shadow);

poligono.setColor(k, color);

}

this.setGeometry(poligono);

}

}

public BranchGroup crearEscena(){

// Este objeto tiene el shadow

Shape3D sh3d = new LitQuad(new Point3f(-0.3f, 0.6f, 0.2f),

new Point3f(-0.3f, -0.3f, 0.2f),

new Point3f(0.6f, -0.3f, -0.3f),

new Point3f(0.6f, 0.6f, -0.3f));

// Creamos el objeto poligono shadow

Shape3D shadow = new Sombra((GeometryArray) sh3d.getGeometry(),

direccion, new Color3f(0.2f, 0.2f, 0.2f), -0.5f);

// agregamos el objeto recien creado a la escena

scene.addChild(shadow);

}