hi everyone.
i'm developing a virtual environment for my major degree project.
i'm importing the geometry of a building from a wavefront obj using a
loader.
i need to implement collision detection so that the viewer canot go through
the walls of the object.
i'm struggling to do it myself and would appreciate someone looking at my
code below and showing me how to do it. many thanks, joe

my code:

import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;

import java.applet.Applet;
import com.sun.j3d.utils.applet.MainFrame;

import com.sun.j3d.loaders.*;
import com.sun.j3d.loaders.objectfile.*;
import com.sun.j3d.utils.behaviors.keyboard.*;
import com.sun.j3d.utils.behaviors.vp.*;
import com.sun.j3d.utils.geometry.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.io.*;

import javax.swing.JFileChooser;

public class Menu extends Applet
{
    private Renderer renderScene;


/***************************************************************************
**************************************************/
    private static final int METAL_LOOK_AND_FEEL = 1;
    private static final int WINDOWS_LOOK_AND_FEEL = 2;
    private static final int MOTIF_LOOK_AND_FEEL = 3;

    private UIManager.LookAndFeelInfo looks[];

    private JMenuBar menuBar = new JMenuBar();

    private JMenu menuFile = new JMenu("  FILE  ");
    private JMenu menuHelp = new JMenu("  HELP  ");

    private JMenuItem menuItem;

    private BoardListener controller = new BoardListener();

    private Panel canvasPanel = new Panel(new BorderLayout());
    private JPanel menuPanel = new JPanel(new BorderLayout());
    private JPanel controlPanel = new JPanel(new BorderLayout());
    private JLabel controls = new JLabel("CONTROLS");




    public Menu()
    {
        try
        {
            looks = UIManager.getInstalledLookAndFeels();

UIManager.setLookAndFeel(looks[WINDOWS_LOOK_AND_FEEL].getClassName());

     }
        catch(Exception e)
        {
            System.err.println(e.getMessage());
        }

       setLayout(new BorderLayout());
       add("North",menuPanel);
       add("East", controlPanel);
       add("Center", canvasPanel);
       canvasPanel.add(new JLabel("Where the scene
goes"),BorderLayout.CENTER);
       controlPanel.add(controls);

       menuItem = new JMenuItem("OPEN");
       menuItem.addActionListener(controller);
       menuFile.add(menuItem);

       menuItem = new JMenuItem("EXIT");
       menuItem.addActionListener(controller);
       menuFile.add(menuItem);

       menuItem = new JMenuItem("How To Load Scene");
       menuItem.addActionListener(controller);
       menuHelp.add(menuItem);

       menuItem = new JMenuItem("How To Add Scene To Menu");
       menuItem.addActionListener(controller);
       menuHelp.add(menuItem);

       menuBar.add(menuFile);
       menuBar.add(menuHelp);

       menuPanel.add(menuBar);

    }


    public void createFileMenu()
    {
        Canvas3D canvas3D = null;

        JFileChooser fileChooser =  new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

        int result = fileChooser.showOpenDialog(this);

        if(result == fileChooser.CANCEL_OPTION)
        {
           return;
        }

        File file = fileChooser.getSelectedFile();

        if(file == null || file.getName().equals(""))
        {
            JOptionPane.showMessageDialog(this,"Invalid File name", "Invalid
file name", JOptionPane.ERROR_MESSAGE);

        }
        System.out.println("File name: "+ file.getName());
        System.out.println("Absolute path: " + file.getAbsolutePath());
        String object = file.getAbsolutePath();
/***************************************************************************
****/
        renderScene = new Renderer(object);

 canvas3D = renderScene.getSimpleUniverse().getCanvas();

        canvasPanel.add(canvas3D);

        SwingUtilities.updateComponentTreeUI(this);
/***************************************************************************
****/


    }

    public class WindowHandler extends WindowAdapter
    {
        public void windowClosing(WindowEvent event)
        {
            exitTool();
        }
    }

    private void exitTool()
    {
        System.exit (0);
    }

    public class BoardListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
     String buttonString = event.getActionCommand();

            System.out.println("\n" + buttonString + " Button Pressed\n");

            if (buttonString.equals("EXIT"))
            {
                exitTool();
            }
            if (buttonString.equals("OPEN"))
            {
             createFileMenu();
            }
        }
    }

    public static void main(String [] args)
    {
         Menu m1 = new Menu();
         new MainFrame(m1,400,400);
    }


}

****************************************************************************
*********************************************

import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;

import java.applet.Applet;
import com.sun.j3d.utils.applet.MainFrame;

import com.sun.j3d.loaders.*;
import com.sun.j3d.loaders.objectfile.*;
import com.sun.j3d.utils.behaviors.keyboard.*;
import com.sun.j3d.utils.behaviors.vp.*;
import com.sun.j3d.utils.geometry.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.io.*;

import javax.swing.JFileChooser;

public class Renderer
{
    private int whichLoader;

    private static final int WAVOBJECTFORMAT = 1;
    private static final int DXFFORMAT = 2;

    private SimpleUniverse universe;
    private String objectToLoad;

    private Canvas3D canvas3D;

    public Renderer()
    {

    }

    public Renderer(String objectToRender)
    {


       objectToLoad = objectToRender;

       GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
       canvas3D = new Canvas3D(config);


       universe = new SimpleUniverse();
       //hide it
       universe.getViewer().getFrame().setVisible(false);


       BranchGroup contents = createSceneGraph();
       universe.getViewingPlatform().setNominalViewingTransform();

       contents.compile();
       universe.addBranchGraph(contents);
    }


    /*
     * Set up for keyboard navigation,
     * Built-in class, uses arrow keys, pgup/pgdn
     *
     * Controls:
     *          DOWN_ARROW = move backward
     *          UP_ARROW = move forward
     *          RIGHT_ARROW = rotate right
     *          LEFT_ARROW = rotate left
     *          PAGE_UP = rotate upward
     *          PAGE_DOWN = rotate downward
     *
     *          ALT_RIGHT_ARROW = move right
     *          ALT_LEFT_ARROW = move left
     *          ALT_PAGE_UP = move upward
     *          ALT_PAGE_DOWN = move downward
     *
     *          EQUALS (HOME_NOMINAL) = stop movement
     *          SHIFT = fast movement, rotation, and scale
     *          SHIFT + META = slow movement, rotation, and scale
     */
    public KeyNavigatorBehavior keyBoardControls()
    {
        TransformGroup vpTrans = null;
        Vector3f translate = new Vector3f();
        Transform3D T3D = new Transform3D();

        vpTrans = universe.getViewingPlatform().getViewPlatformTransform();
        translate.set( 0.0f, 0.3f, 0.0f);
        T3D.setTranslation(translate);
        vpTrans.setTransform(T3D);
        KeyNavigatorBehavior keyNavBeh = new KeyNavigatorBehavior(vpTrans);
        keyNavBeh.setSchedulingBounds(getBoundingSphere());
        return keyNavBeh;
    }


    /**
     * Create scene graph here
     */
    private BranchGroup createSceneGraph()
    {
        BranchGroup objRoot = new BranchGroup();
        // create a green background

        Background back = new Background(new Color3f (0.0f,0.0f,0.4f));
        back.setApplicationBounds(getBoundingSphere());
        TransformGroup objTranslate = new TransformGroup();

        whichFileFormat(objectToLoad);
        selectLoader(whichLoader,objTranslate);

        // Set up a directional light so can see the object
        AmbientLight ambient = new AmbientLight(new Color3f
(0.0f,0.0f,0.5f));
        ambient.setInfluencingBounds(getBoundingSphere());

 DirectionalLight light = new DirectionalLight (
                     new Color3f (1.0f, 1.0f, 1.0f),
                     new Vector3f (-1.0f, -1.0f, -1.0f));
        light.setInfluencingBounds(getBoundingSphere());


        objRoot.addChild(back);
 objRoot.addChild(light);
        objRoot.addChild(ambient);
        objRoot.addChild(objTranslate);
/*********************KEYBOARD
BEHAVIOUR*****************************************/
        objRoot.addChild(keyBoardControls());
/***************************************************************************
*****/


        objRoot.compile();
 return objRoot;
    }


    public SimpleUniverse getSimpleUniverse()
    {
        return universe;
    }

    public TransformGroup selectLoader(int whichLoader,TransformGroup
objTranslate)
    {
        switch(whichLoader)
        {
            case WAVOBJECTFORMAT:
            {
                ObjectFile f = new ObjectFile(ObjectFile.RESIZE);
                Scene scene = null;
                try
                {
                System.out.println("\n About to try to load from obj
file!!!");
                    scene = f.load(objectToLoad);

                    System.out.println("\n Scene Loaded!!!");
                }
                catch (Exception e)
                {
                    System.err.println("Error loading file: " + e);
                }
                objTranslate.addChild(scene.getSceneGroup());
                return objTranslate;
            }
            case DXFFORMAT:
            {
                ObjectFile loader = new ObjectFile(ObjectFile.RESIZE);

                Scene scene = null;
                try
                {
                    System.out.println("\n About to try to load from DXF
file!!!");
                    scene = loader.load(objectToLoad);

                 System.out.println("\n Scene Loaded!!!");
                }
                catch(Exception ex)
                {
                    ex.printStackTrace();
                }

                System.out.println("Dxf file loader selected\n");
                if(scene==null)
                {
                    System.out.println("\n NOT IMPLEMENTED YET");
                    return null;
                }
                objTranslate.addChild(scene.getSceneGroup());
                return objTranslate;
            }
            default:
            {
                System.out.println("\nCannot load this object file format");
            }
        }
        return null;
    }

    public int whichFileFormat(String objectToLoad)
    {
        StringTokenizer format = new StringTokenizer(objectToLoad,".");
        while(format.hasMoreTokens())
        {
            String token = format.nextToken();
         System.out.println("In token loop!");
         if(token.equals("dxf"))
            {
                whichLoader = DXFFORMAT;
            }
            if(token.equals("obj"))
            {
                whichLoader = WAVOBJECTFORMAT;
            }
        }
        return whichLoader;

    }

    public BoundingSphere getBoundingSphere()
    {
        return new BoundingSphere(new Point3d(), Float.MAX_VALUE);

    }

    public static void main(String [] args)
    {
         Renderer demo = new Renderer("anchor.obj");
    }
}

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to