Hi,

I'm writing a 3D-Viewer who can load .obj and .vrml files .
If I'm loading .obj files, the objects are centralized in the middle of my viewer.

But, and that's my problem, when I'm loading .vrml files, the objects are sometimes 
very small or sometimes somewhere in the viewer, so that I have to search the object.

Is there a method from Java 3D that centralized the objects or what have I to do???

It would be very nice if you can formulate the answer detailed!!??

------------------------------------------------------------------
// packages
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.lang.*;
import javax.media.j3d.*;
import javax.vecmath.*;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.behaviors.vp.*;



public class ObjLoad extends Applet {

    private String filename = null;
    private double creaseAngle = 60.0;

    private View view;
    private SimpleUniverse u;
    private BoundingSphere bounds;
    private BranchGroup objRoot;
    private TransformGroup objScale;
    private TransformGroup objTrans;
    private Scene s = null;


    /**
     * In der Methode createSceneGraph() werden die Knoten-Objekte
     * definiert/erzeugt und die Eigenschaften festgelegt.
     *
     **/
    private BranchGroup createSceneGraph() {
 // BranchGroup-Objekt dient als Wurzel/Beginn der Untergraphen
 objRoot = new BranchGroup();


 /**
  * Hier wird anhand der Konsoleneingabe �berpr�ft welchen
  * Datei-Typ man aufrufen m�chte. Momentan werden .wrl und
  * .obj angeboten!!!
  **/
 //wenn der geforderte Datei-Typ .obj ist, dann...
 if(filename.endsWith(".obj")){
  OBJLoader obj = new OBJLoader(filename, creaseAngle, s);
  obj.load();
  }
 //wenn der geforderte Datei-Typ .wrl ist, dann...
 else if(filename.endsWith(".wrl")){
  WRLLoader obj = new WRLLoader(filename, creaseAngle, s);
  obj.load();
  }


 //TranformGroup
  TransformGroup objTrans = new TransformGroup();

  //anh�ngen des TransformGroup an die Wurzel
 //objRoot.addChild(objTrans);
 objTrans.addChild(s.getSceneGroup());

 view = new View();
 bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 1.0);

 //setzen des Viewpoints
 setViewpoint(objTrans, bounds, view);


 // HINTERGRUND-Farbe
        Color3f bgColor = new Color3f(0.05f, 0.05f, 0.5f);
        Background bgNode = new Background(bgColor);
        bgNode.setApplicationBounds(bounds);
        objRoot.addChild(bgNode);

        // LICHT
        Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f);
        AmbientLight ambientLightNode = new AmbientLight(ambientColor);
        ambientLightNode.setInfluencingBounds(bounds);
        objRoot.addChild(ambientLightNode);

        // LICHT-Einfall
        Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);
        Vector3f light1Direction  = new Vector3f(1.0f, 1.0f, 1.0f);
        Color3f light2Color = new Color3f(1.0f, 1.0f, 1.0f);
        Vector3f light2Direction  = new Vector3f(-1.0f, -1.0f, -1.0f);

        DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction);
        light1.setInfluencingBounds(bounds);
        objRoot.addChild(light1);

        DirectionalLight light2 = new DirectionalLight(light2Color, light2Direction);
        light2.setInfluencingBounds(bounds);
        objRoot.addChild(light2);

 return objRoot;
    }

 private void setViewpoint( TransformGroup tg, BoundingSphere sceneBounds, View view ) 
{
          Transform3D viewTrans = new Transform3D();

          // point the view at the center of the object
          Point3d center = new Point3d();
          sceneBounds.getCenter(center);
          double radius = sceneBounds.getRadius();
          Point3d eyePos = new Point3d(center);
          Vector3d up = new Vector3d();

          // pull the eye back far enough to see the whole object
          double eyeDist = radius / Math.tan(view.getFieldOfView() / 2.0);
          int showAllAxis = 2; // fudge to look down Z axis
          switch( showAllAxis ) {
      case 0 :
          eyePos.x += eyeDist;
          up.y = 1;
          break;
      case 1 :
          eyePos.y += eyeDist;
          up.z = -1;
          break;
      case 2 :
          eyePos.z += eyeDist;
          up.y = 1;
          break;
      case 3 :
          eyePos.x -= eyeDist;
          up.y = 1;
          break;
      case 4 :
          eyePos.y -= eyeDist;
          up.z = -1;
          break;
      case 5 :
          eyePos.z -= eyeDist;
          up.y = 1;
          break;
          }

          viewTrans.setIdentity();
          viewTrans.lookAt( eyePos, center, up );
          viewTrans.invert();
          // If we have moved the model behind the back clip distance then change
          // the back clip distance
          if (view.getBackClipDistance()<eyeDist) {
            view.setBackClipDistance( eyeDist );
            view.setFrontClipDistance(eyeDist/3000);
            System.out.println("Back Clip reset to "+eyeDist);
          }

          tg.setTransform(viewTrans); // set the view transform
        } // end setViewpoint()


   public ObjLoad(String args[]) {

        //Eingegebener Dateiname wird initialisiert
        filename = args[0];

 //Layout wird festgelegt
 setLayout(new BorderLayout());
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();

 // 3D-Objekt wird erstellt um wie bei AWT graphische
 // Objekte anzeigen zu k�nnen.
        Canvas3D c = new Canvas3D(config);
 add("Center", c);

 // Einen SceneGraph wird erstellt, um meine 3D-Objekte und ihre Eigenschaften
 // hinzuzuf�gen. Anschliessend wird es dem SimpleUniverse angeh�ngt.
 // Es m�ssen alle Elemente, die zum BranchGroup nicht explizit verkettet
 // werden, weil SimpleUniverse standartm��ig einen vorgibt und die ganze
 // Arbeit �bernimmt.
 BranchGroup scene = createSceneGraph();
 u = new SimpleUniverse(c);

 // ViewingPlatform kontrolliert die Scalierung, Position und die Orientierung.
 ViewingPlatform viewingPlatform = u.getViewingPlatform();
 //System.out.println(viewingPlatform.getFieldOfView());
 ViewPlatform viewPlatform = new ViewPlatform();
 float test = viewPlatform.getActivationRadius();


 // setNominalViewingPlatform r�ckt die ViewPlatform  ein wenig
        // zur�ck, so dass Betrachter die Objekte im ganzen sehen k�nnen.
           viewingPlatform.setNominalViewingTransform();

            OrbitBehavior orbit = new OrbitBehavior(c);
            // BoundingSphere beschreibt den Bereich, in dem sich das Objekt befindet.
            // Dem Konstruktor werden deswegen die x,y,z-Koordinaten und der Radius
            // mitgegeben.

            orbit.setSchedulingBounds(bounds);
            viewingPlatform.setViewPlatformBehavior(orbit);

 // Zum Schluss wird die Scene dem BranchGraph angeh�ngt
 u.addBranchGraph(scene);
    }


    /**
     * Beim schliessen des Fenster werden alle
     * Locales und die Relationen zu deren Branch Graphs entfernt.
     **/
    public void destroy() {
 u.removeAllLocales();
    }

    /**
     * oBJLoad l�uft als Standalone-Application oder als Applet.
     * Die Main-Methode wird irgnoriert, falls diese Application
     * als Applet laufen sollte.
     * Beim starten wird der Dateiname in der Konsole �bergeben.
     **/
    public static void main(String[] args) {
 new MainFrame(new ObjLoad(args), 700, 700);
    }
}

Ciao ciao

==========================================================================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