Hi zusammen,
ich sitze gerade an einem Java 3D Objekt und lade 3D Objekte welche dann vom Benutzer per Maus gedreht und betrachtet werden können.
Ich habe nun 2 Modelle von Stühlen und einer von den beiden Stühlen dreht sich leider nicht um seine eigene Achse (zumindest die X-achse) sonder um einen Achse die ein Stück rechts vom Stuhl liegt, der andere Stuhl hingegen dreht sich so wie er es soll um seine eigenen Achsen.
Ich habe beide Models von Sweet Home 3D : 3D models import als Obj Dateien bezogen.
Es wurden auch von mir keine Einstellungen deswegen vorgenommen, alles ist sozusagen auf "Standard".
Die Rotation habe ich folgendermaßen realisiert:
Ich betrachte die Models zusätzlich immer mit dem Programm PoseRay und auch dort kann ich was die Rotationsachsen angeht keine Unterschiede zwischen den Stühlen feststellen und dort im Preview Fenster von PoseRay drehen sich auch beide Stühle um ihre eigenen Achsen. Das Problem besteht also nur bei mir im Programm.
Kann man denn da überhaupt irgendwas falsch einstellen, weil eigentlich kann ich mir nicht vorstellen das es an meinem Code liegt, weil der andere Stuhl ja soweit funktioniert.
Wie kann man denn die Rotationsachsen eines 3d Models manuell setzen? (Falls das überhaupt möglich ist)
Gruß
Falls erforderlich der komplette Quellcode:
Das sind die 2 Stühle die ich benutzt habe:
http://www.sweethome3d.com/models/contributions/officeChair2.zip -> Geht
http://www.sweethome3d.com/models/contributions/officeChair3.zip -> Geht nicht
ich sitze gerade an einem Java 3D Objekt und lade 3D Objekte welche dann vom Benutzer per Maus gedreht und betrachtet werden können.
Ich habe nun 2 Modelle von Stühlen und einer von den beiden Stühlen dreht sich leider nicht um seine eigene Achse (zumindest die X-achse) sonder um einen Achse die ein Stück rechts vom Stuhl liegt, der andere Stuhl hingegen dreht sich so wie er es soll um seine eigenen Achsen.
Ich habe beide Models von Sweet Home 3D : 3D models import als Obj Dateien bezogen.
Es wurden auch von mir keine Einstellungen deswegen vorgenommen, alles ist sozusagen auf "Standard".
Die Rotation habe ich folgendermaßen realisiert:
Java:
MouseRotate mausDreh = new MouseRotate();
mausDreh.setTransformGroup(transGroup);
mausDreh.setSchedulingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), Double.MAX_VALUE));
Kann man denn da überhaupt irgendwas falsch einstellen, weil eigentlich kann ich mir nicht vorstellen das es an meinem Code liegt, weil der andere Stuhl ja soweit funktioniert.
Wie kann man denn die Rotationsachsen eines 3d Models manuell setzen? (Falls das überhaupt möglich ist)
Gruß
Falls erforderlich der komplette Quellcode:
Java:
import java.awt.*;
....
....
public class SimpleModelView extends JFrame {
private Canvas3D canvas;
private SimpleUniverse universe;
private BranchGroup root;
public SimpleModelView() throws IOException {
configureWindow();
configureCanvas();
conigureUniverse();
addModelToUniverse();
addLightsToUniverse();
universe.addBranchGraph(root);
}
private void configureWindow() {
setTitle("Basic Java3D Program");
setSize(640, 480);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int locationX = (screenSize.width - getWidth()) / 2;
int locationY = (screenSize.height - getHeight()) / 2;
setLocation(locationX,locationY);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void configureCanvas() {
canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
canvas.setDoubleBufferEnable(true);
getContentPane().add(canvas, BorderLayout.CENTER);
}
private void conigureUniverse() {
universe = new SimpleUniverse(canvas);
universe.getViewingPlatform().setNominalViewingTransform();
}
private void addModelToUniverse() throws IOException {
Scene scene = getSceneFromFile("officeChair3.obj");
root = new BranchGroup();
scene.getSceneGroup().setCapability(Shape3D.ALLOW_APPEARANCE_WRITE);
Transform3D transforms = new Transform3D();
TransformGroup transGroup = new TransformGroup(transforms);
transGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
MouseRotate mausDreh = new MouseRotate();
mausDreh.setTransformGroup(transGroup);
mausDreh.setSchedulingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), Double.MAX_VALUE));
transGroup.addChild(scene.getSceneGroup());
root.addChild(transGroup);
root.addChild(mausDreh);
}
private void addLightsToUniverse() {
AmbientLight lightA = new AmbientLight();
lightA.setInfluencingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), Double.MAX_VALUE));
root.addChild(lightA);
Background background = new Background(new Color3f(Color.WHITE));
background.setApplicationBounds(new BoundingSphere());
root.addChild(background);
}
public static Scene getSceneFromFile(String location) throws IOException {
ObjectFile file = new ObjectFile(ObjectFile.RESIZE);
return file.load(new FileReader(location));
}
public static void main(String[] args) {
try {
new SimpleModelView().setVisible(true);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Das sind die 2 Stühle die ich benutzt habe:
http://www.sweethome3d.com/models/contributions/officeChair2.zip -> Geht
http://www.sweethome3d.com/models/contributions/officeChair3.zip -> Geht nicht