summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.classpath6
-rw-r--r--src/tesseract/TesseractUI.java37
-rw-r--r--src/tesseract/objects/Icosahedron.java9
-rw-r--r--src/tesseract/objects/PhysicalObject.java8
4 files changed, 52 insertions, 8 deletions
diff --git a/.classpath b/.classpath
index 967ebcc..fbf7f5f 100644
--- a/.classpath
+++ b/.classpath
@@ -4,6 +4,10 @@
<classpathentry kind="lib" path="support_files/lib/ext/j3dutils.jar"/>
<classpathentry kind="lib" path="support_files/lib/ext/vecmath.jar"/>
<classpathentry kind="src" path="src"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+ <attributes>
+ <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="/usr/lib/jni"/>
+ </attributes>
+ </classpathentry>
<classpathentry kind="output" path="bin"/>
</classpath>
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.