Criando sombras com Java 3D

Veja nesta dica como criar e utilizar sombras para seus objetos com o Java 3D.

Criando sombras com Java 3D

Há duas coisas básicas para simular (ou falsificar) sombras: computar onde as sombras estão, e criar a geometria (ou texturas) para servir como sombra.

Um polígono especificado sem propriedades materiais pode ser usado como um polígono da sombra, chamado de colored shadow polygon.

Este programa ilustra como simular a sombra de um polígono


            // Define a classe do Polygon da sombra
            public class SimpleShadow extends Shape3D {
            
                  SimpleShadow(GeometryArray geom, Vector3f direction, Color3f col,
                    float height) {
            
                  int vCount = geom.getVertexCount();
                  QuadArray poly = new QuadArray(vCount, GeometryArray.COORDINATES
                      | GeometryArray.COLOR_3);
            
                  int v;
                  Point3f vertex = new Point3f();
                  Point3f shadow = new Point3f();
                  for (v = 0; v < vCount; v++) {
                    geom.getCoordinate(v, vertex);
                    shadow.set(vertex.x + (vertex.y - height) * direction.x,
                        height + 0.0001f, vertex.z + 
                        (vertex.y - height) * direction.y);
            
                    poly.setCoordinate(v, shadow);
                    poly.setColor(v, col);
                  }
            
                  this.setGeometry(poly);
                }
            }
            
            public BranchGroup createScene(){
                ...
                
                // Este é o objeto que tem a sombra
                Shape3D plane = 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));
                    
                ...  
                // Criar um objeto do Polígono da sombra
                Shape3D shadow = new SimpleShadow((GeometryArray) plane.getGeometry(),
                    direction, new Color3f(0.2f, 0.2f, 0.2f), -0.5f);
                // Adicionar o objeto do Polígono da sombra na cena
                scene.addChild(shadow);  
                
                ...
            }
        
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados