# HG changeset patch # User Robert McIntyre # Date 1325736205 25200 # Node ID 01dbdb0d55008403131b94e408e366496946ae9a # Parent 77b506ac64f33872dc8c769f3351f634fc8a4f9b offset cone joints achieved! diff -r 77b506ac64f3 -r 01dbdb0d5500 assets/Models/creature1/one.blend Binary file assets/Models/creature1/one.blend has changed diff -r 77b506ac64f3 -r 01dbdb0d5500 assets/Models/creature1/try-again.blend Binary file assets/Models/creature1/try-again.blend has changed diff -r 77b506ac64f3 -r 01dbdb0d5500 org/test-creature.org --- a/org/test-creature.org Wed Jan 04 20:34:00 2012 -0700 +++ b/org/test-creature.org Wed Jan 04 21:03:25 2012 -0700 @@ -70,6 +70,13 @@ (.getZ in) (- (.getY in)))) +(defn jme-to-blender + "Convert from JME coordinates to Blender coordinates" + [#^Vector3f in] + (Vector3f. (.getX in) + (- (.getZ in)) + (.getY in))) + (defn joint-targets "Return the two closest two objects to the joint object, ordered from bottom to top according to the joint's rotation." @@ -88,11 +95,15 @@ (map #(.getGeometry %) results))] (if (>= (count targets) 2) (sort-by - #(.getY - (.mult - (.inverse (.getWorldRotation joint)) - (.subtract (.getWorldTranslation %) - (.getWorldTranslation joint)))) + #(let [v + (jme-to-blender + (.mult + (.inverse (.getWorldRotation joint)) + (.subtract (.getWorldTranslation %) + (.getWorldTranslation joint))))] + (println-repl (.getName %) ":" v) + (.dot (Vector3f. 1 1 1) + v)) (take 2 targets)) (recur (float (* radius 2)))))))) @@ -103,8 +114,8 @@ (:axis defaults to (Vector3f. 1 0 0) if not provided for hinge joints) {:type :cone :limit-xz 0] - :limit-yz 0] - :twist 0]}" + :limit-xy 0] + :twist 0]} (use XZY rotation mode in blender!)" ([#^Node obj-a #^Node obj-b #^Node joint] (let [center-a (.getWorldTranslation obj-a) center-b (.getWorldTranslation obj-b) @@ -158,7 +169,7 @@ (= :cone joint-type) (do (let [limit-xy (:limit-xz constraints) - limit-yz (:limit-yz constraints) + limit-yz (:limit-xy constraints) twist (:twist constraints)] (println-repl "creating CONE joint") @@ -168,19 +179,18 @@ control-b pivot-a pivot-b - (doto (Matrix3f.) - (.fromStartEndVectors - Vector3f/UNIT_X - (.normalize - (.subtract (.getWorldTranslation joint) - (.getWorldTranslation obj-a))))) + (doto (Matrix3f.) (.fromStartEndVectors Vector3f/UNIT_X (.normalize (.subtract - (.getWorldTranslation obj-b) - (.getWorldTranslation joint)))))) + (.getWorldTranslation joint) + (.getWorldTranslation obj-a))))) + (doto (Matrix3f.) + (.set (.getWorldRotation joint))) + + ) (.setLimit (float limit-xy) (float limit-yz) (float twist)))))