Last active
June 4, 2021 19:59
-
-
Save jackrusher/32be28e6fabff06b60b2 to your computer and use it in GitHub Desktop.
The simplest possible @thing_clj physics + @Quilist demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns gumball-machine.core | |
(:require [thi.ng.color.core :as col] | |
[thi.ng.math.core :as m] | |
[thi.ng.geom.core :as g] | |
[thi.ng.geom.core.vector :refer [vec3]] | |
[thi.ng.geom.physics.core :as ph] | |
[thi.ng.geom.sphere :refer [sphere]] | |
[quil.core :as q :include-macros true])) | |
(def particles | |
(repeatedly 20 #(ph/particle (vec3 (m/random -50 50) | |
(m/random -50 50) | |
(m/random -50 50)) 1))) | |
(def engine (ph/physics {:particles particles | |
:drag 0.05 | |
:constraints {:w (ph/shape-constraint-inside | |
(g/center (sphere 200)))} | |
:behaviors {:g (ph/gravity (vec3 0 0.5 0))}})) | |
(defn setup [] | |
(q/smooth) | |
(q/frame-rate 55) | |
(q/color-mode :hsb) | |
(q/no-stroke)) | |
(defn draw [] | |
;; tick the world clock, recalculate particle positions | |
(ph/timestep engine 1) | |
;; if all the particles have come to rest... | |
(when (every? #(< (second (ph/velocity %)) 0.08) particles) | |
(doseq [p particles] | |
;; apply a randomized force to them | |
(ph/add-force p (vec3 (m/random -10 10) -10 (m/random -10 10))))) | |
;; set up bg + lighting conditions | |
(q/background 51) | |
(q/ambient-light 0 0 80) | |
(q/directional-light 0 0 150 0 0 -1) | |
(q/light-specular 0 0 200) | |
(q/specular 0 0 70) | |
(q/shininess 0.5) | |
;; draw the particles | |
(q/with-translation [(/ (q/width) 2) (/ (q/height) 2) 100] | |
(doseq [[i p] (map-indexed vector particles)] | |
(let [[x y z] (ph/position p)] | |
(q/fill (* i 12) 255 255) | |
(q/with-translation [x y z] | |
(q/sphere 6)))))) | |
(q/defsketch gumball-machine | |
:host "gumball-machine" | |
:size [600 600] | |
:renderer :p3d | |
:setup setup | |
:draw draw) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defproject gumball-machine "0.1.0-SNAPSHOT" | |
:description "Using thi.ng from quil + clojurescript." | |
:dependencies [[org.clojure/clojure "1.7.0"] | |
[quil "2.3.0"] | |
[org.clojure/clojurescript "1.7.170"] | |
[thi.ng/geom "0.0.908"] | |
[thi.ng/color "1.0.0"]] | |
:plugins [[lein-cljsbuild "1.1.1"]] | |
:hooks [leiningen.cljsbuild] | |
:cljsbuild {:builds [{:source-paths ["src"] | |
:compiler {:output-to "js/main.js" | |
:output-dir "out" | |
:main "gumball_machine.core" | |
:optimizations :advanced | |
:pretty-print false}}]}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment