Guile verzija v chickadee (+ zametek risalnika)
parent
8c6c5c33ec
commit
e5f481c4ec
|
@ -1,3 +1,6 @@
|
|||
play:
|
||||
chickadee play ww.scm --repl-server
|
||||
|
||||
risalnik:
|
||||
chickadee play risalnik.scm --repl-server
|
||||
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
(add-to-load-path (dirname (current-filename)))
|
||||
|
||||
(use-modules (chickadee)
|
||||
(chickadee graphics color)
|
||||
(chickadee math vector)
|
||||
(system repl coop-server)
|
||||
(ww copic))
|
||||
|
||||
;; Hitra pomoc:
|
||||
;;
|
||||
;; chickadee play anim.scm --repl-server
|
||||
;; ^ pozene fajl z repl serverjem v ozadju
|
||||
|
||||
(define repl (spawn-coop-repl-server))
|
||||
|
||||
;; Stevec izrisanih frejmov
|
||||
(define stevec 0)
|
||||
|
||||
;; copic za risanje - kazalnik
|
||||
(define copic (make-copic (kazalnik 50) (vec2 300 300)))
|
||||
|
||||
(define (prestavi-copic! nov-polozaj)
|
||||
(copic-polozaj-set! copic (vec2+ (copic-polozaj copic)
|
||||
nov-polozaj)))
|
||||
(define (input-handle)
|
||||
(when (key-pressed? 'e)
|
||||
(prestavi-copic! (vec2 0 3)))
|
||||
|
||||
(when (key-pressed? 'd)
|
||||
(prestavi-copic! (vec2 0 -3)))
|
||||
|
||||
(when (key-pressed? 's)
|
||||
(prestavi-copic! (vec2 -3 0)))
|
||||
|
||||
(when (key-pressed? 'f)
|
||||
(prestavi-copic! (vec2 3 0))))
|
||||
|
||||
(define tekst "")
|
||||
|
||||
(set! stevec 6000)
|
||||
|
||||
(define (update dt)
|
||||
;; REPL!
|
||||
(poll-coop-repl-server repl)
|
||||
|
||||
;; Stevec gor
|
||||
(set! stevec (+ stevec 1))
|
||||
;(display (string-append (number->string stevec) "\n"))
|
||||
|
||||
(input-handle)
|
||||
|
||||
(set! tekst (string-append "Stevec:" (number->string stevec))))
|
||||
|
||||
(define (key-press key modifiers repeat?)
|
||||
(cond
|
||||
;; Quit!
|
||||
((eq? key 'q)
|
||||
(abort-game))
|
||||
;; Reload!
|
||||
((eq? key 'r)
|
||||
(load))))
|
||||
|
||||
(define (reset-stevec!)
|
||||
(set! stevec 1))
|
||||
|
||||
(define (draw alpha)
|
||||
;; izpisi tekst
|
||||
(draw-text tekst (vec2 3 3) #:color black)
|
||||
|
||||
;; kurzor
|
||||
(izrisi-kazalnik copic))
|
||||
|
||||
(define (load)
|
||||
(reset-stevec!))
|
||||
|
||||
(run-game
|
||||
#:draw draw
|
||||
#:update update
|
||||
#:key-press key-press
|
||||
#:load load
|
||||
;; Okno init
|
||||
#:window-resizable? #f
|
||||
#:window-title "risalnik"
|
||||
#:clear-color (rgb #xFFFFFF))
|
||||
|
||||
;(reset-stevec!)
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
(add-to-load-path (dirname (current-filename)))
|
||||
|
||||
(use-modules (chickadee)
|
||||
(chickadee graphics color)
|
||||
(chickadee math vector)
|
||||
(srfi srfi-28) ;; format funkcija
|
||||
(ice-9 receive) ;; receive za multiple return
|
||||
(ice-9 string-fun) ;; string-replace-substring
|
||||
(system repl coop-server)
|
||||
(ww scena)
|
||||
(ww obj)
|
||||
(ww izris)
|
||||
(ww copic))
|
||||
|
||||
;; Hitra pomoc:
|
||||
;;
|
||||
;; chickadee play anim.scm --repl-server
|
||||
;; ^ pozene fajl z repl serverjem v ozadju
|
||||
|
||||
(define repl (spawn-coop-repl-server))
|
||||
|
||||
;; Stevec izrisanih frejmov
|
||||
(define stevec 0)
|
||||
|
||||
(define (input-handle)
|
||||
(cond ((key-pressed? 'h)
|
||||
(set! rotX (+ rotX 0.0001)))
|
||||
((key-pressed? 'l)
|
||||
(set! rotX (- rotX 0.0001)))))
|
||||
|
||||
(define objekti '())
|
||||
(define (dodaj-objekt! velikost)
|
||||
(set! objekti (cons (ustvari-kocko velikost) objekti)))
|
||||
|
||||
(define tekst "")
|
||||
|
||||
(define (matrix->string m)
|
||||
(string-replace-substring
|
||||
(format "~a" m)
|
||||
"]" "]\n"))
|
||||
|
||||
(define (zaokrozi n st)
|
||||
(receive (vrednost faktor)
|
||||
(round/ n st)
|
||||
(/ vrednost (/ 1 st))))
|
||||
|
||||
(define (zaokrozi-matrico m)
|
||||
(apply make-matrix4
|
||||
(map (lambda (f) (zaokrozi f 0.01))
|
||||
(list
|
||||
(matrix4-x m)
|
||||
(matrix4-y m)
|
||||
(matrix4-z m)))))
|
||||
|
||||
(define (update dt)
|
||||
;; REPL!
|
||||
(poll-coop-repl-server repl)
|
||||
|
||||
;; Stevec gor
|
||||
(set! stevec (+ stevec 1))
|
||||
;(display (string-append (number->string stevec) "\n"))
|
||||
|
||||
(input-handle)
|
||||
|
||||
(obj-anim dt)
|
||||
|
||||
;(dodaj-objekt! (/ stevec 1000))
|
||||
|
||||
(set! tekst (string-append "Stevec:" (number->string stevec)
|
||||
"\n"
|
||||
"Stevilo objektov: "
|
||||
(number->string (length objekti))
|
||||
"\n"
|
||||
(matrix->string
|
||||
;(zaokrozi-matrico
|
||||
(objekt-polozaj prvi)))));)
|
||||
|
||||
(define rotX 0.0)
|
||||
(define rotY 0.07)
|
||||
(define rotZ 0.02)
|
||||
|
||||
(define (obj-anim dt)
|
||||
;(set! rotX (+ rotX (/ dt 0.2)))
|
||||
;(set! rotY (+ rotY (/ dt 0.1)))
|
||||
;(set! rotZ (+ rotZ (/ dt 0.5)))
|
||||
(map (lambda (objekt)
|
||||
(matrix4-copy! (matrix4*
|
||||
;(matrix4-scale (/ stevec 100))
|
||||
(matrix4-rotate-x rotX)
|
||||
(matrix4-rotate-y rotY)
|
||||
(matrix4-rotate-z rotZ)
|
||||
(objekt-polozaj objekt))
|
||||
(objekt-polozaj objekt)))
|
||||
objekti))
|
||||
|
||||
(define (key-press key modifiers repeat?)
|
||||
(cond
|
||||
((eq? key 'q)
|
||||
(abort-game))
|
||||
((eq? key 'k)
|
||||
(begin
|
||||
(display "dodam objekt!\n")
|
||||
(dodaj-objekt! stevec)))
|
||||
((eq? key 'r)
|
||||
(load))))
|
||||
|
||||
(define (reset-stevec!)
|
||||
(set! stevec 1))
|
||||
|
||||
(define scena %privzeta-scena)
|
||||
|
||||
(define (draw alpha)
|
||||
;; izpisi tekst
|
||||
(draw-text tekst (vec2 3 3) #:color black)
|
||||
|
||||
;; izrsi modele
|
||||
(with-projection
|
||||
(scena-projekcija scena)
|
||||
|
||||
;; kurzor
|
||||
(izrisi-kazalnik 50)))
|
||||
|
||||
;; objekti
|
||||
;(map (lambda (o)
|
||||
; (begin
|
||||
; #nil
|
||||
;(izrisi-objekt o scena)
|
||||
;(izrisi-objekt-wf o scena)
|
||||
; ))
|
||||
; objekti)))
|
||||
|
||||
(define prvi #f)
|
||||
|
||||
(define (load)
|
||||
(reset-stevec!)
|
||||
(set! objekti (list (ustvari-kocko 0.8)))
|
||||
(set! prvi (list-ref objekti 0))
|
||||
|
||||
(scena-kamera-set! %privzeta-scena
|
||||
(vec3 0
|
||||
0
|
||||
-10.0))
|
||||
;; Moramo pogledat model
|
||||
(poglej! (vec3 0 0 0)
|
||||
scena))
|
||||
|
||||
(run-game
|
||||
#:draw draw
|
||||
#:update update
|
||||
#:key-press key-press
|
||||
#:load load
|
||||
;; Okno init
|
||||
#:window-resizable? #f
|
||||
#:window-title "wavey wind"
|
||||
#:clear-color (rgb #xFFFFFF))
|
||||
|
||||
;(reset-stevec!)
|
||||
|
188
guile/ww.scm
188
guile/ww.scm
|
@ -1,38 +1,55 @@
|
|||
(add-to-load-path (dirname (current-filename)))
|
||||
|
||||
(use-modules (chickadee)
|
||||
(chickadee config)
|
||||
(chickadee graphics text)
|
||||
(chickadee graphics phong)
|
||||
(chickadee graphics engine)
|
||||
(chickadee graphics model)
|
||||
(chickadee graphics mesh)
|
||||
(chickadee graphics light)
|
||||
(chickadee graphics shader)
|
||||
(chickadee graphics buffer)
|
||||
(chickadee graphics polygon)
|
||||
(chickadee math)
|
||||
(chickadee graphics color)
|
||||
(chickadee math vector)
|
||||
(chickadee math matrix)
|
||||
(srfi srfi-28) ;; format funkcija
|
||||
(ice-9 receive) ;; receive za multiple return
|
||||
(ice-9 string-fun) ;; string-replace-substring
|
||||
(system repl coop-server)
|
||||
(ww init)
|
||||
(ww kamera)
|
||||
(ww obj))
|
||||
(ww scena)
|
||||
(ww obj)
|
||||
(ww izris))
|
||||
|
||||
;; Hitra pomoc:
|
||||
;;
|
||||
;; chickadee play anim.scm --repl-server
|
||||
;; ^ pozene fajl z repl serverjem v ozadju
|
||||
;;
|
||||
;;
|
||||
|
||||
(define repl (spawn-coop-repl-server))
|
||||
|
||||
;; Stevec izrisanih frejmov
|
||||
(define stevec 0)
|
||||
|
||||
(define (input-handle)
|
||||
(cond ((key-pressed? 'h)
|
||||
(set! dX (+ dX 0.1)))
|
||||
(set! rotX (+ rotX 0.0001)))
|
||||
((key-pressed? 'l)
|
||||
(set! dX (- dX 0.1)))))
|
||||
(set! rotX (- rotX 0.0001)))))
|
||||
|
||||
(define objekti '())
|
||||
(define (dodaj-objekt! velikost)
|
||||
(set! objekti (cons (ustvari-kocko velikost) objekti)))
|
||||
|
||||
(define tekst "")
|
||||
|
||||
(define (matrix->string m)
|
||||
(string-replace-substring
|
||||
(format "~a" m)
|
||||
"]" "]\n"))
|
||||
|
||||
(define (zaokrozi n st)
|
||||
(receive (vrednost faktor)
|
||||
(round/ n st)
|
||||
(/ vrednost (/ 1 st))))
|
||||
|
||||
(define (zaokrozi-matrico m)
|
||||
(apply make-matrix4
|
||||
(map (lambda (f) (zaokrozi f 0.01))
|
||||
(list
|
||||
(matrix4-x m)
|
||||
(matrix4-y m)
|
||||
(matrix4-z m)))))
|
||||
|
||||
(define (update dt)
|
||||
;; REPL!
|
||||
|
@ -40,108 +57,86 @@
|
|||
|
||||
;; Stevec gor
|
||||
(set! stevec (+ stevec 1))
|
||||
(display (string-append (number->string stevec) "\n"))
|
||||
;(display (string-append (number->string stevec) "\n"))
|
||||
|
||||
(input-handle)
|
||||
|
||||
(obj-anim dt))
|
||||
(obj-anim dt)
|
||||
|
||||
(define rotX 0)
|
||||
(define rotY 0)
|
||||
(define rotZ 0)
|
||||
;(dodaj-objekt! (/ stevec 1000))
|
||||
|
||||
(define dX 0)
|
||||
(define dY 0)
|
||||
(define dZ 0)
|
||||
(set! tekst (string-append "Stevec:" (number->string stevec)
|
||||
"\n"
|
||||
"Stevilo objektov: "
|
||||
(number->string (length objekti))
|
||||
"\n"
|
||||
(matrix->string
|
||||
;(zaokrozi-matrico
|
||||
(objekt-polozaj prvi)))));)
|
||||
|
||||
(define rotX 0.0)
|
||||
(define rotY 0.07)
|
||||
(define rotZ 0.02)
|
||||
|
||||
(define (obj-anim dt)
|
||||
(set! rotX (+ rotX (/ dt 0.2) (* dt dX)))
|
||||
(set! rotY (+ rotY (/ dt 0.1)))
|
||||
(set! rotZ (+ rotZ (/ dt 0.5)))
|
||||
|
||||
(matrix4-copy! (matrix4* (matrix4-scale stevec)
|
||||
(matrix4-rotate-x rotX)
|
||||
(matrix4-rotate-y rotY)
|
||||
(matrix4-rotate-z rotZ))
|
||||
model-matrix)
|
||||
(matrix4-copy! (matrix4* (matrix4-scale stevec)
|
||||
(matrix4-rotate-x rotY)
|
||||
(matrix4-rotate-y rotZ)
|
||||
(matrix4-rotate-z rotX))
|
||||
tla-matrix)
|
||||
;(matrix4-scale! model-matrix stevec)
|
||||
;(matrix4-mult! model-matrix model-matrix (matrix4-scale stevec))
|
||||
;(matrix4-rotate-x! model-matrix rotX)
|
||||
;(matrix4-rotate-y! model-matrix rotY)
|
||||
;(matrix4-rotate-z! model-matrix rotZ))
|
||||
)
|
||||
|
||||
;(set! rotX (+ rotX (/ dt 0.2)))
|
||||
;(set! rotY (+ rotY (/ dt 0.1)))
|
||||
;(set! rotZ (+ rotZ (/ dt 0.5)))
|
||||
(map (lambda (objekt)
|
||||
(matrix4-copy! (matrix4*
|
||||
;(matrix4-scale (/ stevec 100))
|
||||
(matrix4-rotate-x rotX)
|
||||
(matrix4-rotate-y rotY)
|
||||
(matrix4-rotate-z rotZ)
|
||||
(objekt-polozaj objekt))
|
||||
(objekt-polozaj objekt)))
|
||||
objekti))
|
||||
|
||||
(define (key-press key modifiers repeat?)
|
||||
(cond
|
||||
((eq? key 'q)
|
||||
(abort-game))
|
||||
((eq? key 'k)
|
||||
(set! obj (cons (ustvari-objekt stevec) obj)))
|
||||
(begin
|
||||
(display "dodam objekt!\n")
|
||||
(dodaj-objekt! stevec)))
|
||||
((eq? key 'r)
|
||||
(load))))
|
||||
|
||||
(define (reset-stevec!)
|
||||
(set! stevec 1))
|
||||
|
||||
(define tla-matrix (make-identity-matrix4))
|
||||
(define position (vec3 0.0 0.0 -4.0))
|
||||
|
||||
(define obj #f)
|
||||
(define tla #f)
|
||||
|
||||
(define nebo #f)
|
||||
|
||||
(define wireframe-shader
|
||||
(load-shader (scope-datadir "shaders/path-stroke-vert.glsl")
|
||||
(scope-datadir "shaders/path-stroke-frag.glsl")))
|
||||
(define scena %privzeta-scena)
|
||||
|
||||
(define (draw alpha)
|
||||
(with-graphics-state
|
||||
((g:polygon-mode line-polygon-mode))
|
||||
(with-projection
|
||||
projection
|
||||
;; izpisi tekst
|
||||
(draw-text tekst (vec2 3 3) #:color black)
|
||||
|
||||
;; objekti
|
||||
(map (lambda (o)
|
||||
(draw-mesh o
|
||||
#:model-matrix model-matrix
|
||||
#:view-matrix view-matrix
|
||||
#:camera-position position
|
||||
#:lights (list (ustvari-luc))))
|
||||
obj)
|
||||
;; izrsi modele
|
||||
(with-projection
|
||||
(scena-projekcija scena)
|
||||
;; objekti
|
||||
(map (lambda (o)
|
||||
(begin
|
||||
(izrisi-objekt o scena)
|
||||
;(izrisi-objekt-wf o scena)
|
||||
))
|
||||
objekti)))
|
||||
|
||||
;; "tla"
|
||||
(draw-mesh tla
|
||||
#:model-matrix tla-matrix
|
||||
#:view-matrix view-matrix
|
||||
#:camera-position position
|
||||
#:lights (list (ustvari-luc)))
|
||||
|
||||
;; wireframe test?
|
||||
(map
|
||||
(lambda (p)
|
||||
(shader-apply
|
||||
my-shader
|
||||
(primitive-vertex-array p)))
|
||||
(mesh-primitives tla)))))
|
||||
|
||||
|
||||
;; :( ne dela?
|
||||
(define prvi #f)
|
||||
|
||||
(define (load)
|
||||
;; Moramo pogledat model
|
||||
(poglej! position)
|
||||
(reset-stevec!)
|
||||
(ustvari-luc)
|
||||
(set! obj (list (ustvari-objekt stevec)))
|
||||
(set! tla (ustvari-tla))
|
||||
(set! nebo (ustvari-nebo)))
|
||||
(set! objekti (list (ustvari-kocko 0.8)))
|
||||
(set! prvi (list-ref objekti 0))
|
||||
|
||||
(scena-kamera-set! %privzeta-scena
|
||||
(vec3 0
|
||||
0
|
||||
-10.0))
|
||||
;; Moramo pogledat model
|
||||
(poglej! (vec3 0 0 0)
|
||||
scena))
|
||||
|
||||
(run-game
|
||||
#:draw draw
|
||||
|
@ -149,8 +144,9 @@
|
|||
#:key-press key-press
|
||||
#:load load
|
||||
;; Okno init
|
||||
#:window-resizable? #t
|
||||
#:window-resizable? #f
|
||||
#:window-title "wavey wind"
|
||||
#:clear-color (rgb #xFFFFFF))
|
||||
|
||||
;(reset-stevec!)
|
||||
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
(define-module (ww copic)
|
||||
#:use-module (srfi srfi-9) ;; records
|
||||
#:use-module (chickadee math vector)
|
||||
#:use-module (chickadee graphics path)
|
||||
#:use-module (chickadee graphics color)
|
||||
#:export (kazalnik izrisi-kazalnik
|
||||
make-copic copic?
|
||||
copic-lik copic-lik-set!
|
||||
copic-polozaj copic-polozaj-set!))
|
||||
|
||||
(define-record-type <copic>
|
||||
(make-copic lik polozaj)
|
||||
copic?
|
||||
(lik copic-lik copic-lik-set!)
|
||||
(polozaj copic-polozaj copic-polozaj-set!))
|
||||
|
||||
(define (kazalnik-barva sirina)
|
||||
(radial-gradient #:start-color (rgba #x000000FF)
|
||||
#:end-color (rgba #x00000000)
|
||||
#:radius sirina
|
||||
#:origin (vec2 sirina sirina)))
|
||||
|
||||
;; Krog z gradientom kot copic
|
||||
(define (kazalnik sirina)
|
||||
(with-style
|
||||
((fill-color (kazalnik-barva sirina)))
|
||||
(fill (circle (vec2 sirina sirina) sirina))))
|
||||
|
||||
(define (izrisi-kazalnik copic)
|
||||
(draw-canvas
|
||||
(make-canvas
|
||||
(translate (copic-polozaj copic)
|
||||
(copic-lik copic)))))
|
|
@ -1,35 +0,0 @@
|
|||
(define-module (ww init)
|
||||
#:use-module (chickadee math vector)
|
||||
#:use-module (chickadee graphics color)
|
||||
#:use-module (chickadee graphics mesh)
|
||||
#:use-module (chickadee graphics light)
|
||||
#:use-module (chickadee graphics pbr)
|
||||
#:use-module (chickadee graphics polygon)
|
||||
#:use-module (chickadee graphics skybox)
|
||||
#:use-module (chickadee graphics texture)
|
||||
#:export (ustvari-tla
|
||||
ustvari-nebo
|
||||
ustvari-luc))
|
||||
|
||||
(define (ustvari-tla)
|
||||
(make-plane 0.002
|
||||
0.002
|
||||
(make-pbr-material #:base-color-factor (vec3 1.0 0 0)
|
||||
#:polygon-mode line-polygon-mode)))
|
||||
|
||||
;; (define (ustvari-kvadrat sirina)
|
||||
;; (build-mesh
|
||||
;; "kvadrat"
|
||||
;; (let* ((polovica (/ sirina 2.0))
|
||||
;; (levo-zgoraj (vec3 (- polovica) 0.0 (- polovica))
|
||||
;; (vec2 )))
|
||||
;; (list (vertex (vec3 (- sirina)))))))
|
||||
|
||||
(define (ustvari-nebo)
|
||||
(default-skybox))
|
||||
|
||||
(define (ustvari-luc)
|
||||
(make-directional-light
|
||||
#:direction (vec3 1 1 1)
|
||||
#:color white
|
||||
#:intensity 10))
|
|
@ -0,0 +1,36 @@
|
|||
(define-module (ww izris)
|
||||
#:use-module (chickadee config)
|
||||
#:use-module (chickadee graphics engine)
|
||||
#:use-module (chickadee math matrix)
|
||||
#:use-module (chickadee graphics mesh)
|
||||
#:use-module (chickadee graphics polygon)
|
||||
#:use-module (chickadee graphics shader)
|
||||
#:use-module (ww obj)
|
||||
#:use-module (ww scena)
|
||||
#:export (izrisi-objekt izrisi-objekt-wf))
|
||||
|
||||
(define wireframe-shader
|
||||
(load-shader (scope-datadir "shaders/path-stroke-vert.glsl")
|
||||
(scope-datadir "shaders/path-stroke-frag.glsl")))
|
||||
|
||||
(define (izrisi-objekt o scena)
|
||||
(draw-mesh (objekt-geo o)
|
||||
#:model-matrix (objekt-polozaj o)
|
||||
#:view-matrix (scena-pogled scena)
|
||||
#:camera-position (scena-kamera scena)
|
||||
#:lights (list (scena-luc scena))))
|
||||
|
||||
(define (izrisi-objekt-wf o scena)
|
||||
;; Izrisi WF vsakega primitiva v geometriji objekta
|
||||
(with-graphics-state
|
||||
((g:polygon-mode line-polygon-mode))
|
||||
(map (lambda (p)
|
||||
(shader-apply wireframe-shader
|
||||
(primitive-vertex-array p)
|
||||
#:model-matrix (objekt-polozaj o)
|
||||
#:view-matrix (scena-pogled scena)
|
||||
#:camera-position (scena-kamera scena)
|
||||
#:projection (current-projection)))
|
||||
;#:mvp (matrix4* (objekt-polozaj o)
|
||||
; (current-projection))))
|
||||
(mesh-primitives (objekt-geo o)))))
|
|
@ -1,14 +0,0 @@
|
|||
(define-module (ww kamera)
|
||||
#:use-module (chickadee math)
|
||||
#:use-module (chickadee math vector)
|
||||
#:use-module (chickadee math matrix)
|
||||
#:export (poglej! view-matrix projection))
|
||||
|
||||
(define projection (perspective-projection (/ pi 3.0) (/ 4.0 3.0) 0.1 10.0))
|
||||
(define view-matrix (make-identity-matrix4))
|
||||
|
||||
(define (poglej! position)
|
||||
(look-at! view-matrix
|
||||
position
|
||||
(vec3+ position (vec3 0.0 0.0 1.0))
|
||||
(vec3 0.0 1.0 0.0)))
|
|
@ -1,23 +1,35 @@
|
|||
(define-module (ww obj)
|
||||
#:use-module (srfi srfi-9) ;; records
|
||||
#:use-module (chickadee math matrix)
|
||||
#:use-module (chickadee math vector)
|
||||
#:use-module (chickadee graphics mesh)
|
||||
#:use-module (chickadee graphics pbr)
|
||||
#:use-module (chickadee graphics phong)
|
||||
#:use-module (chickadee graphics polygon)
|
||||
#:export (ustvari-objekt model-matrix))
|
||||
#:export (%privzet-material
|
||||
ustvari-okvir ustvari-kocko
|
||||
ustvari-objekt objekt? objekt-geo objekt-geo-set! objekt-polozaj objekt-polozaj-set!))
|
||||
|
||||
(define model-matrix (make-identity-matrix4))
|
||||
(define-record-type <objekt>
|
||||
(make-objekt geo polozaj)
|
||||
objekt?
|
||||
(geo objekt-geo objekt-geo-set!)
|
||||
(polozaj objekt-polozaj objekt-polozaj-set!))
|
||||
|
||||
(define (ustvari-objekt stevec)
|
||||
(let ((velikost (/ stevec 2000.0))
|
||||
(barva (vec3 0.2 0.8 0.4)))
|
||||
(make-cube velikost
|
||||
(make-pbr-material #:base-color-factor barva
|
||||
#:polygon-mode line-polygon-mode
|
||||
#:metallic-factor 0.1))
|
||||
(define %privzet-material
|
||||
(make-pbr-material
|
||||
#:base-color-factor (vec3 0.2 0.8 0.4)
|
||||
#:polygon-mode line-polygon-mode))
|
||||
|
||||
;(make-plane velikost
|
||||
; velikost
|
||||
; (make-pbr-material))
|
||||
))
|
||||
(define* (ustvari-kocko velikost #:optional (material %privzet-material))
|
||||
(ustvari-objekt
|
||||
(make-cube velikost material)))
|
||||
|
||||
(define* (ustvari-okvir velikost #:optional (material %privzet-material))
|
||||
(ustvari-objekt
|
||||
(make-plane velikost
|
||||
velikost
|
||||
material)))
|
||||
|
||||
;; Objekt je par geometrije (mesh) in matrike za polozaj
|
||||
(define* (ustvari-objekt geo #:optional (polozaj (make-identity-matrix4)))
|
||||
(make-objekt geo polozaj))
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
(define-module (ww scena)
|
||||
#:use-module (srfi srfi-9)
|
||||
#:use-module (chickadee graphics color)
|
||||
#:use-module (chickadee graphics light)
|
||||
#:use-module (chickadee math)
|
||||
#:use-module (chickadee math matrix)
|
||||
#:use-module (chickadee math vector)
|
||||
#:export (%privzeta-scena
|
||||
make-scena scena? scena-kamera scena-kamera-set! scena-pogled-set! scena-pogled scena-luc scena-projekcija
|
||||
poglej! ustvari-luc))
|
||||
|
||||
(define-record-type <scena>
|
||||
(make-scena pogled luc kamera projekcija)
|
||||
scena?
|
||||
(pogled scena-pogled scena-pogled-set!)
|
||||
(luc scena-luc)
|
||||
(kamera scena-kamera scena-kamera-set!)
|
||||
(projekcija scena-projekcija))
|
||||
|
||||
(define (ustvari-luc)
|
||||
(make-directional-light
|
||||
#:direction (vec3 1 1 1)
|
||||
#:color white
|
||||
#:intensity 10))
|
||||
|
||||
(define %privzeta-scena
|
||||
(make-scena (make-identity-matrix4) ;; pogled
|
||||
(ustvari-luc) ;; luc
|
||||
(vec3 0.0 0.0 -4.0) ;; polozaj kamere
|
||||
(perspective-projection ;; projekcija
|
||||
(/ pi 3.0) (/ 4.0 3.0) 0.1 500.0)))
|
||||
|
||||
;; Usmeri kamero na polozaj
|
||||
(define* (poglej! polozaj #:optional (scena %privzeta-scena))
|
||||
(look-at! (scena-pogled scena)
|
||||
polozaj ;; poglej na polozaj
|
||||
(scena-kamera scena) ;; s polozaja kamere
|
||||
(vec3 0.0 1.0 0.0))) ;; gor je gor
|
Loading…
Reference in New Issue