Desenhar notebook com Java3D

2 respostas
viniciuslaredo

Pessoal, estou desenhando um notebook com Java 3D, porém não estou conseguindo fazer com que a tampa fique próxima da base do noot, usei o a figura geometrica Box para desenhar. Apliquei também o mouse rotation para girar o objeto, porém ao girar, descobri que a tela está no meio da base, preciso que ela fique mais no fundo da tela.
Vou postar a imagem também para ajudar a entender o problema. http://twitpic.com/2xrwrw

é possivel aplicar textura em somente uma face do Box? Observer que a textura de um teclado que apliquei, está sendo gerada em todos os lados do box!
Segue o codigo:

import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.awt.GraphicsConfiguration;
import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import javax.vecmath.Vector3d;

public class notebook_novo {

    public static void main(String[] args) {

        JFrame janela = new JFrame("Notebook");
        janela.setBounds(0, 0, 600, 600);
        janela.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);


        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D cena = new Canvas3D(config);
        BranchGroup group = new BranchGroup();

        TextureLoader tex = new TextureLoader("c:\\textura.jpg", null);
        //2 - Aplique a textura a uma aparência
        Appearance ap = new Appearance();
        ap.setTexture(tex.getTexture());

        //Criação da Base
        Box base = new Box(0.7f, 0.03f, 0.5f, Box.GENERATE_TEXTURE_COORDS, ap);
        TransformGroup trg = new TransformGroup();
        trg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        Transform3D transform = new Transform3D();
        Vector3d posicao = new Vector3d(0.0, -0.2, 0);
        transform.set(posicao);
        trg.setTransform(transform);
        trg.addChild(base);

        group.addChild(trg);

        //Criação da Tampa
        Box tampa = new Box(0.7f, 0.3f, 0.03f, ap);
        TransformGroup trg1 = new TransformGroup();
        trg1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        Transform3D transform1 = new Transform3D();
        Vector3d posicao1 = new Vector3d(0.0, 0.1, 0);
        transform1.set(posicao1);
        trg1.setTransform(transform1);
        trg1.addChild(tampa);

        group.addChild(trg1);


        //Behavior para trabalhar com o mouse
        MouseRotate mr = new MouseRotate(trg);
        MouseRotate mr1 = new MouseRotate(trg1);
        //Seleciona a área na qual o cubo fará a rotação
        mr.setSchedulingBounds(base.getBounds());
        mr1.setSchedulingBounds(tampa.getBounds());
        //Associa o TransformGroup ao behavior
        trg.addChild(mr);
        trg.addChild(mr1);


        //Imagem como plano de fundo
        //1 - Carregue uma imagem
        TextureLoader tex2 = new TextureLoader("C:\\fundo.jpg", null);
        //2 -Aplique a imagem a um Background
        Background bg2 = new Background();
        bg2.setImage(tex2.getImage());
        //3 - Defina a forma de exibição
        bg2.setImageScaleMode(Background.SCALE_FIT_ALL);
        bg2.setApplicationBounds(new BoundingSphere());
        //4 - Exiba o Background (comente a linha para retirar a imagem de background)
        group.addChild(bg2);

        group.compile();

        SimpleUniverse simple = new SimpleUniverse(cena);
        simple.addBranchGraph(group);
        simple.getViewingPlatform().setNominalViewingTransform();

        janela.add(cena);
        janela.setVisible(true);

    }
}

2 Respostas

viniciuslaredo

Ninguém galera? rsrsrs

heroijapa

box.getShape(1).setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); box.getShape(1).setAppearance(app);

Criado 15 de outubro de 2010
Ultima resposta 16 de jan. de 2011
Respostas 2
Participantes 2