Java 3D- Por favor ajudem-me

1 resposta
nono

Bom dia
Precisava muito da vossa ajuda. O meu problema consiste no seguinte: tenho dois objectos, um circulo e um quadrado, estes objectos têm que fazer um L, o circulo começa a andar e qd chega á esquina tem que desaparecer e ai aparecer o quadrado a fazer o resto do percurso. O que me está acontecer é que aparecem os dois objectos ao mesmo tempo. Será que me sabem dizer como fazer para aparecer um de cada vez, em tempos diferentes?Em baixo encontra-se o meu trabalho. Agradecia imenso a vossa ajuda.
Desde já muito obrigada

import java.util.Vector;

import javax.vecmath.<em>;

import java.awt.</em>;

import java.awt.event.<em>;

import java.net.URL;

import javax.media.j3d.</em>;

import com.sun.j3d.utils.universe.<em>;

import com.sun.j3d.utils.geometry.</em>;

import com.sun.j3d.utils.image.<em>;

import com.sun.j3d.utils.behaviors.mouse.</em>;

import com.sun.j3d.utils.behaviors.vp.<em>;

import java.applet.</em>;

import com.sun.j3d.utils.applet.MainFrame;
public class RoboBombeiro extends Applet {

public static void main(String[] args) {

new MainFrame(new RoboBombeiro(), 900, 650);

}
public void init() {
    
    // ******************** CRIAÇÃO DO CANVAS *********************
    GraphicsConfiguration gc = SimpleUniverse.getPreferredConfiguration();
    Canvas3D cv = new Canvas3D(gc);
    
    setLayout(new BorderLayout());
    add(cv, BorderLayout.CENTER);

    // ******************** CRIAÇÃO DO GRAFO DE CENA *********************
    BranchGroup bg = createSceneGraph();
    bg.compile();
    
    // ******************** CRIAÇÃO DO SIMPLEUNIVERSE *********************
    SimpleUniverse su = new SimpleUniverse(cv);
    su.getViewingPlatform().setNominalViewingTransform();
    
    // ******************** CRIAÇÃO DO ORBITBEHAVIOR *********************
    OrbitBehavior orbit = new OrbitBehavior(cv);
    orbit.setSchedulingBounds(new BoundingSphere());
    su.getViewingPlatform().setViewPlatformBehavior(orbit);
    su.addBranchGraph(bg);
}

private BranchGroup createSceneGraph() {
    BranchGroup root = new BranchGroup();
    
    // ******************** CRIAÇÃO DO BOUNDINGSPHERE *********************
    BoundingSphere bounds = new BoundingSphere();
    
    // ******************** CRIAÇÃO DO Triangulo *********************
   
    Appearance apR1 = createRobotAppearance1();
    Group robot1 = createRobot1(apR1);
     
    Appearance apR3 = createRobotAppearance3();
    Group robot3 = createRobot3(apR3);
    
    // ******************** CRIAÇÃO DO TRANSFORMGROUP *********************
    Transform3D trScale = new Transform3D();
    trScale.setScale(0.15);
    TransformGroup tgP = new TransformGroup(trScale);
    
    // ******************** COLOCAR TRIANGULO NO CENTRO DO ECRAN *********************
    Transform3D trx = new Transform3D();
    trx.setTranslation(new Vector3f(-2.5f,-2.5f,0f));
    TransformGroup tgTransl = new TransformGroup(trx);
    tgP.addChild(tgTransl);
    root.addChild(tgP);
           
     // ******************** CRIAÇÃO DO POSITIONPATHINTERPOLATOR *********Separados*********************
    Point3f[] positions = {new Point3f(2.828f,0.48f,0), new Point3f(2.02f,0.48f,0.0f),
    new Point3f(1.22f,0.48f,0.0f), new Point3f(0.48f,0.48f,0.0f)};
   
    float[] knots = {0f,0.3f,0.6f,1f};
    Alpha alpha = new Alpha(-1,40000);
    TransformGroup target = new TransformGroup();
    target.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    target.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
    target.addChild(createRobot3(apR3));
    Transform3D axis = new Transform3D();
    PositionPathInterpolator interpolator = new PositionPathInterpolator(alpha, target, axis, knots, positions);
    interpolator.setSchedulingBounds(bounds);
    tgTransl.addChild(target);
    root.addChild(interpolator);   

    Point3f[] positions1 = {new Point3f(0.48f,1.22f,0.0f),new Point3f(0.48f,2.02f,0.0f), new Point3f(0.48f,2.64f,0.0f)};
    float[] knots1 = {0f,0.5f,1f};
    Alpha alpha1 = new Alpha(-1,40000);
    TransformGroup target1 = new TransformGroup();
    target1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    target1.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
    target1.addChild(createRobot1(apR1));
    Transform3D axis1 = new Transform3D();
    PositionPathInterpolator interpolator1 = new PositionPathInterpolator(alpha1, target1, axis1, knots1, positions1);
    interpolator1.setSchedulingBounds(bounds);
    tgTransl.addChild(target1);
    root.addChild(interpolator1);   
    // ******************** CRIAÇÃO DO BACKGROUND *********************
    Background background = createBackground();
    background.setApplicationBounds(bounds);
    root.addChild(background);
    return root;
}
// ******************** COR DO TRIANGULO  *********************
Appearance ap12 = createTextureAppearance12();
private Appearance ap;
Appearance createTextureAppearance12(){
    Appearance ap12 = new Appearance();
    URL filename =
            getClass().getClassLoader().getResource("Cilindro Grande.png");
    TextureLoader loader = new TextureLoader(filename, this);
    ImageComponent2D image = loader.getImage();
    if(image == null) {
        System.out.println("can't find texture file.");
    }
    Texture2D texture = new Texture2D
            (Texture.BASE_LEVEL, Texture.RGBA,
            image.getWidth(), image.getHeight());
    texture.setImage(0, image);
    texture.setEnable(true);
    texture.setMagFilter(Texture.BASE_LEVEL_LINEAR);
    texture.setMinFilter(Texture.BASE_LEVEL_LINEAR);
    ap12.setTexture(texture);
    return ap12;
}
Background createBackground(){
    Background background = new Background(0,0,0);
    return background;
}
// ******************** TRIANGULO PARA CIMA *********************
Group createRobot1(Appearance ap10) {
    Group robot1 = new Group();
    Transform3D tr = new Transform3D();                   
    // ******************** CILINDRO DE BAIXO *********************
    tr.setTranslation(new Vector3d(0,0,0));
    tr.setRotation(new AxisAngle4d(1, 0, 0, Math.PI/2));
    Box c40 = new Box(0.24f, 0.12f, 0.33f, Primitive.GENERATE_TEXTURE_COORDS, ap);
    TransformGroup c40tg = new TransformGroup(tr);
    c40tg.addChild(c40);
    robot1.addChild(c40tg);
    tr.setIdentity();
    return robot1;
}
Appearance createRobotAppearance1(){
    Appearance appear = new Appearance();
    URL filename = getClass().getClassLoader().getResource("marble_2.jpg");
    TextureLoader loader = new TextureLoader(filename, this);
    Texture texture = loader.getTexture();
    appear.setTexture(texture);
    return appear;
}
// ******************** TRIANGULO DE LADO *********************

Group createRobot3(Appearance ap10) {

Group robot3 = new Group();
Transform3D tr = new Transform3D();
                          
    // ******************** CILINDRO DE BAIXO *********************
    tr.setTranslation(new Vector3d(0,0,0));
    tr.setRotation(new AxisAngle4d(1, 0, 0, Math.PI/2));
    Cylinder c60 = new Cylinder(0.24f,0.12f, Cylinder.GENERATE_NORMALS, 50, 2, ap12);
    TransformGroup c60tg = new TransformGroup(tr);
    c60tg.addChild(c60);
    robot3.addChild(c60tg);
    tr.setIdentity();
    return robot3;  
}
Appearance createRobotAppearance3(){
    Appearance appear = new Appearance();
    URL filename = getClass().getClassLoader().getResource("marble_2.jpg");
    TextureLoader loader = new TextureLoader(filename, this);
    Texture texture = loader.getTexture();
    appear.setTexture(texture);
    return appear;
}

}

1 Resposta

P

Você não pode fazer isso usando JPCT não ou JMonkey? Uma série de tarefas ai que to vendo que voce está tendo dificuldades seriam solucionadas rapidamente com essas engines.

Outra dica: Se estiver usando o eclipse, não importe com * não, economize memória importando cada classe separadamente. Para importar, aperta Ctrl+shift+o .

Outra dica: Use as tags code do fórum.

Criado 8 de julho de 2008
Ultima resposta 8 de jul. de 2008
Respostas 1
Participantes 2