diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tesseract/TesseractUI.java | 37 | ||||
-rw-r--r-- | src/tesseract/objects/Icosahedron.java | 9 | ||||
-rw-r--r-- | src/tesseract/objects/PhysicalObject.java | 8 |
3 files changed, 47 insertions, 7 deletions
diff --git a/src/tesseract/TesseractUI.java b/src/tesseract/TesseractUI.java index 4eed465..da31971 100644 --- a/src/tesseract/TesseractUI.java +++ b/src/tesseract/TesseractUI.java @@ -23,6 +23,7 @@ import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; import javax.swing.Timer; import javax.vecmath.Point3d; +import javax.vecmath.Point3f; import javax.vecmath.Vector3f; import tesseract.forces.CircularXY; @@ -341,18 +342,18 @@ public class TesseractUI extends JFrame { pc.setShapeLocation(e); PickResult r = pc.pickClosest(); - if (r.getObject().getUserData() instanceof PhysicalObject) { + if (r != null && r.getObject().getUserData() instanceof PhysicalObject) { myCurrentObject = (PhysicalObject) r.getObject().getUserData(); myCurrentObject.selected(true); } - - System.out.println(r.getObject().getUserData()); } public void mouseReleased(final MouseEvent e) { - myCurrentObject.selected(false); + if (myCurrentObject != null) { + myCurrentObject.selected(false); + } myCurrentObject = null; } }); @@ -364,8 +365,32 @@ public class TesseractUI extends JFrame { public void mouseDragged(final MouseEvent e) { if (lastDragEvent != null) { if (myCurrentObject != null) { - myCurrentObject.getPosition().x = 0.1f * (e.getX() - lastDragEvent.getX()); - myCurrentObject.getPosition().y = -0.1f * (e.getY() - lastDragEvent.getY()); + float scale = 0.001f; + + int xdiff = e.getX() - lastDragEvent.getX(); + int ydiff = - e.getY() + lastDragEvent.getY(); + + Point3f p = new Point3f(scale * xdiff, scale * ydiff, 0); + Transform3D t3d = new Transform3D(); + t3d.rotX(cameraXRotation); + Transform3D tmp = new Transform3D(); + tmp.rotY(cameraYRotation); + t3d.mul(tmp); + t3d.invert(); + t3d.transform(p); + + if (e.isAltDown()) { + myCurrentObject.getOrientation().x += p.x; + myCurrentObject.getOrientation().y += p.y; + myCurrentObject.getOrientation().z += p.z; + myCurrentObject.getOrientation().w = 1; + + } else { + myCurrentObject.getPosition().x += p.x; + myCurrentObject.getPosition().y += p.y; + myCurrentObject.getPosition().z += p.z; + } + myCurrentObject.updateTranformGroup(); diff --git a/src/tesseract/objects/Icosahedron.java b/src/tesseract/objects/Icosahedron.java index 668295c..eb2efa0 100644 --- a/src/tesseract/objects/Icosahedron.java +++ b/src/tesseract/objects/Icosahedron.java @@ -61,7 +61,14 @@ public class Icosahedron extends PhysicalObject { super(position, mass);
setShape(buildIcosahedron(scale));
- //this.centerOfMass = new Vector3f(0.01f, 0.01f, 0.01f);
+
+ if (inverseMass != 0) {
+ final float radius = (float) (scale * Math.sqrt(GOLDEN_RATIO * GOLDEN_RATIO + 1));
+ inverseInertiaTensor.m00 = 2f / 5 / inverseMass * radius * radius;
+ inverseInertiaTensor.m11 = inverseInertiaTensor.m00;
+ inverseInertiaTensor.m22 = inverseInertiaTensor.m00;
+ inverseInertiaTensor.invert();
+ }
}
/**
diff --git a/src/tesseract/objects/PhysicalObject.java b/src/tesseract/objects/PhysicalObject.java index 01fc5f7..fa69e8a 100644 --- a/src/tesseract/objects/PhysicalObject.java +++ b/src/tesseract/objects/PhysicalObject.java @@ -6,6 +6,7 @@ import javax.media.j3d.GeometryArray; import javax.media.j3d.Node; import javax.media.j3d.Shape3D; import javax.media.j3d.TransformGroup; +import javax.vecmath.Quat4f; import javax.vecmath.Vector3f; import alden.CollidableObject; @@ -99,6 +100,13 @@ public class PhysicalObject extends CollidableObject { public Vector3f getPosition() { return position; } + + /** + * @return The orientation of the object. + */ + public Quat4f getOrientation() { + return this.orientation; + } /** * When set to true, the object will ignore all updateState calls. |