# HG changeset patch # User Robert McIntyre # Date 1329447954 25200 # Node ID 85f3ff3e3f26d81de8a4f25ae07f6ae770bb9dd3 # Parent d1206b11ae2d34faf65daa4e382ff642d3a07ed5 still working on video generation diff -r d1206b11ae2d -r 85f3ff3e3f26 assets/Models/test-creature/hand.blend Binary file assets/Models/test-creature/hand.blend has changed diff -r d1206b11ae2d -r 85f3ff3e3f26 org/integration.org --- a/org/integration.org Thu Feb 16 12:48:51 2012 -0700 +++ b/org/integration.org Thu Feb 16 20:05:54 2012 -0700 @@ -96,53 +96,106 @@ (def full 9001) ;; the systax here is [keyframe body-part force] (def wiggle-each-finger-tip - [[300 :pointer-3-f 50] + [[300 :pinky-3-f 50] + [320 :pinky-2-f 80] + [340 :pinky-1-f 100] + [310 :ring-3-f 100] + [330 :ring-2-f 120] + [350 :ring-1-f 140] - [400 :middle-3-f full] - [401 :middle-3-f 50] + [330 :middle-3-f 120] + [340 :middle-2-f 120] + [360 :middle-1-f 30] - [600 :ring-3-f full] - [601 :ring-3-f 40] + [350 :pointer-3-f 120] + [360 :pointer-2-f 120] + [380 :pointer-1-f 30] - [800 :pinky-3-f full] - [801 :pinky-3-f 50] + [800 :pinky-3-f 0] + [800 :pinky-2-f 0] + [800 :pinky-1-f 0] - [1300 :pointer-1-f full] - [1300 :pointer-2-f full] - [1300 :pointer-3-f 0] + [800 :ring-3-f 0] + [800 :ring-2-f 0] + [800 :ring-1-f 0] - [1289 :middle-1-f full] - [1289 :middle-2-f full] - [1289 :middle-3-f 0] - - [1310 :pointer-1-f 0] - [1310 :pointer-2-f 0] - [1310 :pointer-3-f 0] + [800 :middle-3-f 0] + [800 :middle-2-f 0] + [800 :middle-1-f 0] - [1310 :middle-1-f 0] - [1310 :middle-2-f 0] - [1310 :middle-3-f 0] + [800 :pointer-3-f 0] + [800 :pointer-2-f 0] + [800 :pointer-1-f 0] + [800 :pinky-3-e 50] + [800 :pinky-2-e 80] + [800 :pinky-1-e 100] + [800 :ring-3-e 100] + [800 :ring-2-e 120] + [800 :ring-1-e 140] + + [800 :middle-3-e 120] + [800 :middle-2-e 120] + [800 :middle-1-e 30] + + [800 :pointer-3-e 120] + [800 :pointer-2-e 120] + [800 :pointer-1-e 30] + + [870 :pinky-3-e 0] + [870 :pinky-2-e 0] + [870 :pinky-1-e 0] + + [870 :ring-3-e 0] + [870 :ring-2-e 0] + [870 :ring-1-e 0] + + [870 :middle-3-e 0] + [870 :middle-2-e 0] + [870 :middle-1-e 0] + + [870 :pointer-3-e 0] + [870 :pointer-2-e 0] + [870 :pointer-1-e 0] + + [1500 :pointer-1-f full] + [1500 :pointer-2-f full] + [1500 :pointer-3-f full] + + [1500 :middle-1-f full] + [1500 :middle-2-f full] + [1500 :middle-3-f full] + + [1510 :pointer-1-f 0] + [1510 :pointer-2-f 0] + [1510 :pointer-3-f 0] + + [1510 :middle-1-f 0] + [1510 :middle-2-f 0] + [1510 :middle-3-f 0] ]) -(defn gen-summon-ball [] - (let [wait (atom 20)] +(defn gen-summon-ball [debug?] + (let [wait (atom 1100)] (fn [world] (if (= 0 (swap! wait dec)) (let [brick (box 0.8 0.8 0.8 :mass 0.05 - :position (Vector3f. 0 0 0.5) - :color (ColorRGBA/Red))] - - (.addControl - brick - (proxy [AbstractControl] [] - (controlUpdate [tpf] - (println-repl (.getWorldTranslation brick))) - (controlRender [_ _]))) + :position (Vector3f. -0.5 0 0.5) + :color (ColorRGBA/Red)) + bell (AudioNode. (asset-manager) + "Sounds/pure.wav" false)] + (.play bell) + (if debug? + (.addControl + brick + (proxy [AbstractControl] [] + (controlUpdate [tpf] + (println-repl (.getWorldTranslation brick))) + (controlRender [_ _])))) (add-element world brick)))))) @@ -158,7 +211,7 @@ 0 ;;thumb-2.0011 # 0 ;;middle-11 # 0 ;;middle-11 # - 1 ;;pointer-31 # + 0 ;;pointer-31 # 0 ;;pointer-31 # 0 ;;middle-21 # 0 ;;middle-21 # @@ -180,26 +233,29 @@ 0 ;;pinky-11 # ]) +(import com.aurellem.capture.Capture) + (defn test-everything! ([] (test-everything! false)) ([record?] (let [me (sphere 0.5 :color ColorRGBA/Blue :physical? false) - bell (AudioNode. (asset-manager) - "Sounds/pure.wav" false) + base (File. "/home/r/proj/cortex/render/hand") + + creature (doto (load-blender-model hand) (body!)) - summon-ball (gen-summon-ball) + summon-ball (gen-summon-ball false) ;;;;;;;;;;;; Sensors/Effectors ;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ;;touch (touch! creature) - ;;touch-display (view-touch) + touch (touch! creature) + touch-display (view-touch) - ;;vision (vision! creature) - ;;vision-display (view-vision) + vision (vision! creature) + vision-display (view-vision) - ;;hearing (hearing! creature) - ;;hearing-display (view-hearing) + hearing (hearing! creature) + hearing-display (view-hearing) prop (proprioception! creature) prop-display (view-proprioception) @@ -216,17 +272,14 @@ (box 10 2 10 :position (Vector3f. 0 -9 0) :color ColorRGBA/Gray :mass 0) me]) - (merge standard-debug-controls - {"key-return" - (fn [_ value] - (if value - (.play bell)))}) - + standard-debug-controls + (fn [world] (.setTimer world (RatchetTimer. 60)) (position-camera - world (Vector3f. 7.7101235, 6.3628435, -14.15047) - (Quaternion. 0.3644328, -0.2558489, 0.104854375, 0.8892332)) + world (Vector3f. -0.13217318, 5.816415, -5.3089414) + (Quaternion. 0.55685693, 0.0042774677, -0.0028673497, 0.83059245)) + (light-up-everything world) (enable-debug world) (add-camera! world @@ -234,20 +287,337 @@ (.getChild (.getChild creature "eyes") "eye")) (comp (view-image) BufferedImage!)) - (speed-up world) - ) + + (if record? + (Capture/captureVideo + world (File. base "main"))) + (if record? + (Capture/captureAudio + world (File. base "main.wav")))) (fn [world tpf] - ;;(prop-display (prop)) - ;;(touch-display (map #(% (.getRootNode world)) touch)) - ;;(vision-display (map #(% world) vision)) - ;;(hearing-display (map #(% world) hearing)) + (prop-display + (prop) + (if record? (File. base "proprio"))) + (touch-display + (map #(% (.getRootNode world)) touch) + (if record? (File. base "touch"))) + (vision-display + (map #(% world) vision) + (if record? (File. base "vision"))) + (hearing-display + (map #(% world) hearing) + (if record? (File. base "hearing"))) + (muscle-display + (control-script muscles) + (if record? (File. base "muscle"))) + (summon-ball world) - ;;(muscle-display - (control-script muscles) - ;;) - + (.setLocalTranslation me (.getLocation (.getCamera world))) (fix-display world)))))) + + +(comment +;; list of touch targets +0 middle-11 +1 middle-21 +2 middle-31 +3 pinky-11 +4 pinky-21 +5 pinky-31 +6 pointer-11 +7 pointer-21 +8 pointer-31 +9 ring-11 +10 ring-21 +11 ring-31 +12 thumb-11 +13 thumb-2.0011 + + +;; list of vision targets +0 :all +1 :green +2 :blue +3 :red + +;; list of proprio targets +0 middle-11 -> middle-21 +1 middle-21 -> middle-31 +2 thumb-11 -> thumb-2.0011 +3 pointer-11 -> pointer-21 +4 pointer-21 -> pointer-31 +5 ring-21 -> ring-31 +6 ring-11 -> ring-21 +7 pinky-21 -> pinky-31 +8 pinky-11 -> pinky-21 +9 middle-11 -> palm1 +10 pinky-11 -> palm1 +11 palm1 -> pointer-11 +12 palm1 -> ring-11 +13 palm1 -> thumb-11 + + +;; list of muscle targets +0 :pointer-2-e +1 :pointer-2-f +2 :thumb-1 +3 :thumb-1 +4 :pointer-1-e +5 :pointer-1-f +6 :thumb-2-e +7 :thumb-2-f +8 :middle-1-e +9 :middle-1-f +10 :pointer-3-f +11 :pointer-3-e +12 :middle-2-e +13 :middle-2-f +14 :middle-3-f +15 :middle-3-e +16 :pinky-2-e +17 :pinky-2-f +18 :pinky-3-f +19 :pinky-3-e +20 :ring-3-e +21 :ring-3-f +22 :ring-2-f +23 :ring-2-e +24 :ring-1-e +25 :ring-1-f +26 :thumb-1-e +27 :thumb-1-f +28 :pinky-1-f +29 :pinky-1-e +) + + + +;; rotate touch 180 + +;; rotate mucles 90 counter-clockwise +;; scale muscles to 15x60 + +finger width : 113 +finger height : 357 + +thumb width : 113 + +pinky --- 0,195 +ring --- 111,100 +middle --- 228,0 +pointer -- 436,96 +thumb --- 486,420 + + + +within a finger (coordinates of top left corner (x,y)): + +tip-flexor : 0,7 +tip-extensor : 98,7 +tip : 18,0 + +joint-2-3 : 32,79 + +mid-flexor : 19,131 +mid-extensor : 80,131 +mid : 30,133 + +joint-1-2 : 32,193 + +base-flexor : 19,245 +base-extensor : 80,245 +base : 39,247 + +joint-palm-1 : 32,307 + + +Thumb is the same as finger, except it has two more pieces + +extra-flexor-1 : 2,131 +extra-flexor-2 : 100,131 + +;; rotate entire thumb 45 degrees clockwise + +within vision +gray -- 165,577 +green -- 278,577 +blue -- 165,682 +red -- 278,682 + +entire hand : 809, 22 +main view : 78,202 +hearing : 784,819 + +hand-size: 688x769 + + +total image size: +1600x894 + +(def base (File. "/home/r/proj/cortex/render/hand")) + + + +(defn prepare-muscle [muscle] + ["(" muscle "-rotate" "90" "-scale" "15x60!" ")"]) + +(defn prepare-touch [touch] + ["(" touch "-rotate" "180" ")"]) + +(defn generate-top-finger [tip-flexor tip-extensor tip + joint-2-3 + mid-flexor mid-extensor mid + joint-1-2] + ["(" + "-size" "113x357" "xc:transparent" + (prepare-muscle tip-flexor) "-geometry" "+0+7" "-composite" + (prepare-muscle tip-extensor) "-geometry" "+98+7" "-composite" + (prepare-touch tip) "-geometry" "+18+0" "-composite" + + joint-2-3 "-geometry" "+32+79" "-composite" + + (prepare-muscle mid-flexor) "-geometry" "+19+131" "-composite" + (prepare-muscle mid-extensor) "-geometry" "+80+131" "-composite" + (prepare-touch mid) "-geometry" "+39+133" "-composite" + + joint-1-2 "-geometry" "+32+193" "-composite" + ")"]) + +(defn generate-finger + [tip-flexor tip-extensor tip + joint-2-3 + mid-flexor mid-extensor mid + joint-1-2 + base-flexor base-extensor base + joint-palm-1] + ["(" + "-size" "113x357" "xc:transparent" + (generate-top-finger + tip-flexor tip-extensor tip + joint-2-3 + mid-flexor mid-extensor mid + joint-1-2) "-geometry" "+0+0" "-composite" + (prepare-muscle base-flexor) "-geometry" "+19+245" "-composite" + (prepare-muscle base-extensor) "-geometry" "+80+245" "-composite" + (prepare-touch base) "-geometry" "+39+247" "-composite" + joint-palm-1 "-geometry" "+32+307" "-composite" + ")"]) + +(defn generate-thumb + [tip-flexor tip-extensor tip + joint-1-2 + mid-flexor mid-extensor mid-flexor-2 mid-extensor-2 mid + joint-palm-1] + ["(" + "-size" "113x357" "xc:transparent" + (generate-top-finger + tip-flexor tip-extensor tip + joint-1-2 + mid-flexor mid-extensor mid + joint-palm-1) "-geometry" "+0+0" "-composite" + (prepare-muscle mid-flexor-2) "-geometry" "+2+131" "-composite" + (prepare-muscle mid-extensor-2) "-geometry" "+100+131" "-composite" + ")"]) + +pinky --- 0,195 +ring --- 111,100 +middle --- 228,0 +pointer -- 436,96 +thumb --- 486,420 + + +(defn generate-hand + [pinky-pieces + ring-pieces + middle-pieces + pointer-pieces + thumb-pieces] + ["(" + "-size" "688x769" "xc:transparent" + (apply generate-finger pinky-pieces) + "-geometry" "+0+195" "-composite" + (apply generate-finger ring-pieces) + "-geometry" "+111+100" "-composite" + (apply generate-finger middle-pieces) + "-geometry" "+228+0" "-composite" + "(" (apply generate-thumb thumb-pieces) "-background" "#00000000" + "-rotate" "45" ")" + "-geometry" "+300+420" "-composite" + (apply generate-finger pointer-pieces) + "-geometry" "+350+96" "-composite" + ")"]) + +(defn generate-vision + [all green blue red] + ["(" + "-size" "204x192" "xc:transparent" + all "-geometry" "+0+0" "-composite" + green "-geometry" "+113+0" "-composite" + blue "-geometry" "+0+105" "-composite" + red "-geometry" "+113+105" "-composite" + ")"]) + + + +(def test-muscle (File. base "muscle/0/0000000.png")) +(def test-proprio (File. base "proprio/0/0000000.png")) +(def test-tip (File. base "touch/2/0000000.png")) +(def test-mid (File. base "touch/0/0000000.png")) +(def test-vision (File. base "vision/0/0000000.png")) +(def test-hearing (File. base "hearing/0/0000000.png")) +(def test-main (File. base "main/0000000.png")) + + +(def test-target (File. base "output.png")) + +(def background (File. base "background.png")) + +(use 'clojure.contrib.shell-out) +(defn final-image [muscle proprio tip mid vision hearing main] + (let [[muscle proprio tip mid vision hearing main] (map #(.getCanonicalPath %) + [muscle proprio tip mid vision + hearing main]) + finger-pieces [muscle muscle tip + proprio + muscle muscle mid + proprio + muscle muscle mid + proprio] + thumb-pieces [muscle muscle tip + proprio + muscle muscle muscle muscle mid + proprio]] + + + (apply + sh + (flatten + ["convert" + (.getCanonicalPath background) + (generate-hand finger-pieces + finger-pieces + finger-pieces + finger-pieces + thumb-pieces) + "-geometry" "+809+22" "-composite" + + (generate-vision vision vision vision vision) + "-geometry" "+974+599" "-composite" + + hearing + "-geometry" "+784+819" "-composite" + + main + "-geometry" "+78+202" "-composite" + + (.getCanonicalPath test-target)])))) + + + + + + #+end_src #+results: integration