2018-06-18 01:05:40 +02:00
|
|
|
(ns sliva.core)
|
2018-03-20 21:12:42 +01:00
|
|
|
|
|
|
|
(enable-console-print!)
|
|
|
|
|
2018-03-22 06:06:29 +01:00
|
|
|
(console.log "Hello, Sky!")
|
2018-03-20 21:12:42 +01:00
|
|
|
|
2018-03-22 06:06:29 +01:00
|
|
|
;;;;; ☭☭☭☭☭☭☭☭☭☭☭☭☭☭ ;;;;;;
|
|
|
|
;; ☭☭☭☭ Parametri razni ☭☭☭☭ ;;
|
|
|
|
;;;;; ☭☭☭☭☭☭☭☭☭☭☭☭☭☭ ;;;;;;
|
|
|
|
|
|
|
|
(def odmik-kamere 100)
|
|
|
|
(def rotacija-kamere 1)
|
|
|
|
(def FOV 140)
|
|
|
|
(def lik-sirina 2)
|
|
|
|
(def obj-limit 1000)
|
|
|
|
|
|
|
|
(def objekti (atom []))
|
|
|
|
(def stevec (atom 0))
|
|
|
|
|
|
|
|
(def rotacija-x 0.006)
|
|
|
|
(def rotacija-y 0.001)
|
|
|
|
(def rotacija-z 0.003)
|
|
|
|
|
|
|
|
(def zamik-barve 0.0000666)
|
|
|
|
(def zacetna-barva 0.333)
|
|
|
|
(def saturacija 1)
|
|
|
|
(def svetlost 0.4)
|
|
|
|
|
|
|
|
(def w-diff 0.5)
|
|
|
|
(def gostota-obj 2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;; Inicializacija ;;
|
|
|
|
|
|
|
|
(def scena (THREE.Scene.))
|
|
|
|
|
2018-06-18 01:05:40 +02:00
|
|
|
(def kamera (THREE.PerspectiveCamera. FOV (/ (.-innerWidth js/window)
|
|
|
|
(.-innerHeight js/window)) 0.1 2000))
|
2018-03-22 06:06:29 +01:00
|
|
|
(aset kamera "position" "z" odmik-kamere)
|
2018-06-18 01:05:40 +02:00
|
|
|
(aset kamera "aspect" (/ (.-innerWidth js/window)
|
|
|
|
(.-innerHeight js/window)))
|
2018-03-22 06:10:04 +01:00
|
|
|
(.updateProjectionMatrix kamera)
|
2018-03-22 06:06:29 +01:00
|
|
|
|
|
|
|
(def izris (THREE.WebGLRenderer. (js-obj "alpha" true)))
|
2018-06-18 01:05:40 +02:00
|
|
|
(.setSize izris (.-innerWidth js/window) (.-innerHeight js/window))
|
2018-03-22 06:06:29 +01:00
|
|
|
|
|
|
|
;; Crno ozadje
|
|
|
|
(.setClearColor izris 0x000000 1)
|
|
|
|
|
|
|
|
(defn dodaj-obj [sirina]
|
|
|
|
(let [barva (js/THREE.Color.)
|
2018-06-18 01:05:40 +02:00
|
|
|
mat (js/THREE.LineBasicMaterial.)
|
2018-03-22 06:06:29 +01:00
|
|
|
geo (js/THREE.Geometry.)
|
2018-06-18 01:05:40 +02:00
|
|
|
koti (.-vertices geo)
|
2018-03-22 06:06:29 +01:00
|
|
|
zamik (/ sirina 2)
|
|
|
|
-zamik (* -1 zamik)]
|
2018-06-18 01:05:40 +02:00
|
|
|
|
2018-03-22 06:06:29 +01:00
|
|
|
;; Nastavi barvo novega objekta
|
|
|
|
(.setHSL barva (* @stevec zacetna-barva) saturacija svetlost)
|
2018-06-18 01:05:40 +02:00
|
|
|
(aset mat "color" barva)
|
2018-03-22 06:06:29 +01:00
|
|
|
|
|
|
|
;; Kvadratek (za nov objekt)
|
2018-06-18 01:05:40 +02:00
|
|
|
(.push koti (js/THREE.Vector3. -zamik 0 0) (js/THREE.Vector3. 0 zamik 0))
|
|
|
|
(.push koti (js/THREE.Vector3. -zamik 0 0) (js/THREE.Vector3. 0 -zamik 0))
|
|
|
|
(.push koti (js/THREE.Vector3. zamik 0 0) (js/THREE.Vector3. 0 zamik 0))
|
|
|
|
(.push koti (js/THREE.Vector3. zamik 0 0) (js/THREE.Vector3. 0 -zamik 0))
|
|
|
|
|
|
|
|
(let [obj (js/THREE.Line. geo mat (.-LineSegments js/THREE))
|
|
|
|
novi-objekti (conj (take obj-limit @objekti)
|
|
|
|
obj)]
|
2018-03-22 06:06:29 +01:00
|
|
|
(.add scena obj)
|
|
|
|
|
|
|
|
;; pucaj sceno ane
|
2018-06-18 01:05:40 +02:00
|
|
|
(reset! objekti novi-objekti))))
|
2018-03-22 06:06:29 +01:00
|
|
|
|
|
|
|
(defn obj-anim [obj]
|
|
|
|
(.rotateY obj rotacija-y)
|
|
|
|
(.rotateZ obj rotacija-z)
|
|
|
|
(.rotateX obj rotacija-x)
|
|
|
|
|
2018-06-18 01:05:40 +02:00
|
|
|
(let [new-scale (+ (aget obj "scale" "x")
|
|
|
|
w-diff)]
|
2018-03-22 06:06:29 +01:00
|
|
|
(aset obj "scale" "x" new-scale)
|
|
|
|
(aset obj "scale" "y" new-scale)
|
|
|
|
(aset obj "scale" "z" new-scale))
|
|
|
|
|
2018-06-18 01:05:40 +02:00
|
|
|
(.offsetHSL (aget obj "material" "color") zamik-barve 0 0))
|
2018-03-22 06:06:29 +01:00
|
|
|
|
|
|
|
(defn cam-rotate []
|
|
|
|
(.translateX kamera rotacija-kamere)
|
|
|
|
(.translateZ kamera (- odmik-kamere
|
|
|
|
(.sqrt js/Math (+ (.pow js/Math odmik-kamere 2)
|
2018-06-18 01:05:40 +02:00
|
|
|
(.pow js/Math rotacija-kamere 2)))))
|
|
|
|
(.lookAt kamera scena.position))
|
2018-03-22 06:06:29 +01:00
|
|
|
|
|
|
|
(defn render []
|
|
|
|
(js/requestAnimationFrame render)
|
|
|
|
|
2018-06-18 01:05:40 +02:00
|
|
|
(reset! stevec (inc @stevec))
|
2018-03-22 06:06:29 +01:00
|
|
|
|
2018-06-18 01:05:40 +02:00
|
|
|
(if (= 0 (rem @stevec gostota-obj))
|
|
|
|
(dodaj-obj lik-sirina))
|
2018-03-22 06:06:29 +01:00
|
|
|
|
|
|
|
(.render izris scena kamera)
|
|
|
|
|
2018-06-18 01:05:40 +02:00
|
|
|
(run! obj-anim @objekti)
|
|
|
|
(cam-rotate))
|
|
|
|
|
|
|
|
(defn start-render []
|
|
|
|
(let [container (.getElementById js/document "container")]
|
|
|
|
(.appendChild container (.-domElement izris))))
|
|
|
|
|
|
|
|
(defn stop-render []
|
|
|
|
(let [container (.getElementById js/document "container")]
|
|
|
|
(.removeChild container (.-firstChild container))))
|
2018-03-22 06:06:29 +01:00
|
|
|
|
|
|
|
;; Zacetek ;;
|
|
|
|
(aset js/document "onreadystatechange"
|
|
|
|
(fn []
|
2018-06-18 01:05:40 +02:00
|
|
|
(if (= (.-readyState js/document) "complete")
|
|
|
|
(start-render)
|
|
|
|
(render))))
|
2018-03-20 21:12:42 +01:00
|
|
|
|
|
|
|
(defn on-js-reload []
|
2018-06-18 01:05:40 +02:00
|
|
|
(stop-render)
|
|
|
|
(start-render))
|
2018-03-22 06:06:29 +01:00
|
|
|
|
|
|
|
;; Hendlaj risajz
|
|
|
|
(defn on-window-resize[]
|
2018-06-18 01:05:40 +02:00
|
|
|
(let [sirina (.-innerWidth js/window)
|
|
|
|
visina (.-innerHeight js/window)]
|
|
|
|
(aset kamera "aspect" (/ sirina visina))
|
|
|
|
(.updateProjectionMatrix kamera)
|
|
|
|
(.setSize izris sirina visina)))
|
2018-03-22 06:06:29 +01:00
|
|
|
(.addEventListener js/window "resize" on-window-resize false)
|