Mercurial > cortex
diff org/cortex.org @ 25:775d97247dd0
cleaning up world.org
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Mon, 24 Oct 2011 05:25:01 -0700 |
parents | cab2da252494 |
children | 6372c108c5c6 |
line wrap: on
line diff
1.1 --- a/org/cortex.org Mon Oct 24 01:19:15 2011 -0700 1.2 +++ b/org/cortex.org Mon Oct 24 05:25:01 2011 -0700 1.3 @@ -78,6 +78,7 @@ 1.4 (cortex.import/mega-import-jme3) 1.5 (use '[pokemon [lpsolve :only [constant-map]]]) 1.6 (use 'cortex.world) 1.7 +(use 'cortex.util) 1.8 #+end_src 1.9 1.10 #+srcname: brick-wall-body 1.11 @@ -744,250 +745,7 @@ 1.12 1.13 1.14 1.15 -* The Body 1.16 -** Eyes 1.17 - 1.18 -Ultimately I want to make creatures with eyes. Each eye can be 1.19 -independely moved and should see its own version of the world 1.20 -depending on where it is. 1.21 -#+srcname: eyes 1.22 -#+begin_src clojure 1.23 -(ns body.eye) 1.24 -(use 'cortex.world) 1.25 -(use 'cortex.import) 1.26 -(use 'clojure.contrib.def) 1.27 -(cortex.import/mega-import-jme3) 1.28 -(rlm.rlm-commands/help) 1.29 -(import java.nio.ByteBuffer) 1.30 -(import java.awt.image.BufferedImage) 1.31 -(import java.awt.Color) 1.32 -(import java.awt.Dimension) 1.33 -(import java.awt.Graphics) 1.34 -(import java.awt.Graphics2D) 1.35 -(import java.awt.event.WindowAdapter) 1.36 -(import java.awt.event.WindowEvent) 1.37 -(import java.awt.image.BufferedImage) 1.38 -(import java.nio.ByteBuffer) 1.39 -(import javax.swing.JFrame) 1.40 -(import javax.swing.JPanel) 1.41 -(import javax.swing.SwingUtilities) 1.42 -(import javax.swing.ImageIcon) 1.43 -(import javax.swing.JOptionPane) 1.44 -(import java.awt.image.ImageObserver) 1.45 - 1.46 - 1.47 - 1.48 -(defn scene-processor 1.49 - "deals with converting FrameBuffers to BufferedImages so 1.50 - that the continuation function can be defined only in terms 1.51 - of what it does with BufferedImages" 1.52 - [continuation] 1.53 - (let [byte-buffer (atom nil) 1.54 - renderer (atom nil) 1.55 - image (atom nil)] 1.56 - (proxy [SceneProcessor] [] 1.57 - (initialize 1.58 - [renderManager viewPort] 1.59 - (let [cam (.getCamera viewPort) 1.60 - width (.getWidth cam) 1.61 - height (.getHeight cam)] 1.62 - (reset! renderer (.getRenderer renderManager)) 1.63 - (reset! byte-buffer 1.64 - (BufferUtils/createByteBuffer 1.65 - (* width height 4))) 1.66 - (reset! image (BufferedImage. width height 1.67 - BufferedImage/TYPE_4BYTE_ABGR)))) 1.68 - (isInitialized [] (not (nil? @byte-buffer))) 1.69 - (reshape [_ _ _]) 1.70 - (preFrame [_]) 1.71 - (postQueue [_]) 1.72 - (postFrame 1.73 - [#^FrameBuffer fb] 1.74 - (.clear @byte-buffer) 1.75 - (.readFrameBuffer @renderer fb @byte-buffer) 1.76 - (Screenshots/convertScreenShot @byte-buffer @image) 1.77 - (continuation @image)) 1.78 - (cleanup [])))) 1.79 - 1.80 -(defn add-eye 1.81 - "Add an eye to the world, and call continuation on 1.82 - every frame produced" 1.83 - [world camera continuation] 1.84 - (let [width (.getWidth camera) 1.85 - height (.getHeight camera) 1.86 - render-manager (.getRenderManager world) 1.87 - viewport (.createMainView render-manager "eye-view" camera)] 1.88 - (doto viewport 1.89 - (.setBackgroundColor ColorRGBA/Black) 1.90 - (.setClearFlags true true true) 1.91 - (.addProcessor (scene-processor continuation)) 1.92 - (.attachScene (.getRootNode world))))) 1.93 - 1.94 -(defn make-display-frame [display width height] 1.95 - (SwingUtilities/invokeLater 1.96 - (fn [] 1.97 - (.setPreferredSize display (Dimension. width height)) 1.98 - (doto (JFrame. "Eye Camera!") 1.99 - (-> (.getContentPane) (.add display)) 1.100 - (.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE) 1.101 - (.pack) 1.102 - (.setLocationRelativeTo nil) 1.103 - (.setResizable false) 1.104 - (.setVisible true))))) 1.105 - 1.106 -(defn image-monitor [#^BufferedImage image] 1.107 - (proxy [JPanel] [] 1.108 - (paintComponent 1.109 - [g] 1.110 - (proxy-super paintComponent g) 1.111 - (locking image 1.112 - (.drawImage g image 0 0 1.113 - (proxy [ImageObserver] 1.114 - [] 1.115 - (imageUpdate 1.116 - [] 1.117 - (proxy-super imageUpdate)))))))) 1.118 - 1.119 -(defn movie-image [] 1.120 - (let [setup 1.121 - (runonce 1.122 - (fn [#^BufferedImage image] 1.123 - (let [width (.getWidth image) 1.124 - height (.getHeight image) 1.125 - display (image-monitor image) 1.126 - frame (make-display-frame display width height)] 1.127 - display)))] 1.128 - (fn [#^BufferedImage image] 1.129 - (.repaint (setup image))))) 1.130 - 1.131 - 1.132 -(defn observer 1.133 - "place thy eye!" 1.134 - [world camera] 1.135 - (let [eye camera 1.136 - width (.getWidth eye) 1.137 - height (.getHeight eye)] 1.138 - (no-exceptions 1.139 - (add-eye 1.140 - world 1.141 - eye 1.142 - (movie-image))))) 1.143 -#+end_src 1.144 - 1.145 -#+srcname: test-vision 1.146 -#+begin_src clojure 1.147 - 1.148 -(ns test.vision) 1.149 -(use 'cortex.world) 1.150 -(use 'cortex.import) 1.151 -(use 'clojure.contrib.def) 1.152 -(use 'body.eye) 1.153 -(cortex.import/mega-import-jme3) 1.154 -(rlm.rlm-commands/help) 1.155 -(import java.nio.ByteBuffer) 1.156 -(import java.awt.image.BufferedImage) 1.157 -(import java.awt.Color) 1.158 -(import java.awt.Dimension) 1.159 -(import java.awt.Graphics) 1.160 -(import java.awt.Graphics2D) 1.161 -(import java.awt.event.WindowAdapter) 1.162 -(import java.awt.event.WindowEvent) 1.163 -(import java.awt.image.BufferedImage) 1.164 -(import java.nio.ByteBuffer) 1.165 -(import javax.swing.JFrame) 1.166 -(import javax.swing.JPanel) 1.167 -(import javax.swing.SwingUtilities) 1.168 -(import javax.swing.ImageIcon) 1.169 -(import javax.swing.JOptionPane) 1.170 -(import java.awt.image.ImageObserver) 1.171 - 1.172 - 1.173 -(def width 200) 1.174 -(def height 200) 1.175 - 1.176 -(defn camera [] 1.177 - (doto (Camera. width height) 1.178 - (.setFrustumPerspective 45 1 1 1000) 1.179 - (.setLocation (Vector3f. -3 0 -5)) 1.180 - (.lookAt Vector3f/ZERO Vector3f/UNIT_Y))) 1.181 - 1.182 -(defn camera2 [] 1.183 - (doto (Camera. width height) 1.184 - (.setFrustumPerspective 45 1 1 1000) 1.185 - (.setLocation (Vector3f. 3 0 -5)) 1.186 - (.lookAt Vector3f/ZERO Vector3f/UNIT_Y))) 1.187 - 1.188 -(defn setup-fn [world] 1.189 - (let [eye (camera) 1.190 - width (.getWidth eye) 1.191 - height (.getHeight eye)] 1.192 - (no-exceptions 1.193 - (add-eye 1.194 - world 1.195 - eye 1.196 - (runonce visual)) 1.197 - (add-eye 1.198 - world 1.199 - (camera2) 1.200 - (runonce visual))))) 1.201 - 1.202 -(defn spider-eye [position] 1.203 - (doto (Camera. 200 200 ) 1.204 - (.setFrustumPerspective 45 1 1 1000) 1.205 - (.setLocation position) 1.206 - (.lookAt Vector3f/ZERO Vector3f/UNIT_Y))) 1.207 - 1.208 -(defn setup-fn* [world] 1.209 - (let [eye (camera) 1.210 - width (.getWidth eye) 1.211 - height (.getHeight eye)] 1.212 - ;;(.setClearFlags (.getViewPort world) true true true) 1.213 - (observer world (.getCamera world)) 1.214 - (observer world (spider-eye (Vector3f. 3 0 -5))) 1.215 - ;;(observer world (spider-eye (Vector3f. 0 0 -5))) 1.216 - ;; (observer world (spider-eye (Vector3f. -3 0 -5))) 1.217 - ;; (observer world (spider-eye (Vector3f. 0 3 -5))) 1.218 - ;; (observer world (spider-eye (Vector3f. 0 -3 -5))) 1.219 - ;; (observer world (spider-eye (Vector3f. 3 3 -5))) 1.220 - ;; (observer world (spider-eye (Vector3f. -3 3 -5))) 1.221 - ;; (observer world (spider-eye (Vector3f. 3 -3 -5))) 1.222 - ;; (observer world (spider-eye (Vector3f. -3 -3 -5))) 1.223 - 1.224 - ) 1.225 - world) 1.226 - 1.227 -(defn test-world [] 1.228 - (let [thing (box 1 1 1 :physical? false)] 1.229 - (world 1.230 - (doto (Node.) 1.231 - (.attachChild thing)) 1.232 - {} 1.233 - setup-fn 1.234 - (fn [world tpf] 1.235 - (.rotate thing (* tpf 0.2) 0 0) 1.236 - )))) 1.237 - 1.238 - 1.239 -#+end_src 1.240 - 1.241 - 1.242 -#+results: eyes 1.243 -: #'body.eye/test-world 1.244 - 1.245 -Note the use of continuation passing style for connecting the eye to a 1.246 -function to process the output. The example code will create two 1.247 -videos of the same rotating cube from different angles, sutiable for 1.248 -stereoscopic vision. 1.249 - 1.250 - 1.251 - 1.252 - 1.253 - 1.254 - 1.255 * COMMENT code generation 1.256 -#+begin_src clojure :tangle ../src/cortex/import.clj 1.257 -<<import>> 1.258 -#+end_src 1.259 1.260 #+begin_src clojure :tangle ../src/hello/brick_wall.clj 1.261 <<brick-wall-header>> 1.262 @@ -997,13 +755,6 @@ 1.263 #+begin_src clojure :tangle ../src/hello/hello_simple_app.clj 1.264 <<hello-simple-app>> 1.265 #+end_src 1.266 - 1.267 -#+begin_src clojure :tangle ../src/cortex/world.clj 1.268 -<<world-inputs>> 1.269 -<<world>> 1.270 -<<world-shapes>> 1.271 -<<world-view>> 1.272 -#+end_src 1.273 1.274 #+begin_src clojure :tangle ../src/cortex/other_games.clj 1.275 <<other-games>> 1.276 @@ -1029,13 +780,6 @@ 1.277 <<material>> 1.278 #+end_src 1.279 1.280 -#+begin_src clojure :tangle ../src/body/eye.clj 1.281 -<<eyes>> 1.282 -#+end_src 1.283 - 1.284 -#+begin_src clojure :tangle ../src/test/vision.clj 1.285 -<<test-vision>> 1.286 -#+end_src 1.287 1.288 1.289