wavey-wind/anim.scm

190 lines
5.0 KiB
Scheme

(use-modules (chickadee)
(chickadee graphics color)
(chickadee graphics text)
(chickadee graphics pbr)
(chickadee graphics phong)
(chickadee graphics mesh)
(chickadee graphics engine)
(chickadee graphics model)
(chickadee graphics light)
(chickadee graphics skybox)
(chickadee graphics polygon)
(chickadee graphics shader)
(chickadee graphics buffer)
(chickadee graphics texture)
(chickadee math)
(chickadee math vector)
(chickadee math matrix)
(system repl coop-server))
;; Hitra pomoc:
;;
;; chickadee play anim.scm --repl-server
;; ^ pozene fajl z repl serverjem v ozadju
;;
;;
(define repl (spawn-coop-repl-server))
(define (poglej)
(look-at! view-matrix
position
(vec3+ position (vec3 0.0 0.0 1.0))
(vec3 0.0 1.0 0.0)))
(define (update dt)
;; REPL!
(poll-coop-repl-server repl)
;; Stevec gor
(set! stevec (+ stevec 1))
(display (string-append (number->string stevec) "\n"))
(obj-anim dt))
(define rotX 0)
(define rotY 0)
(define rotZ 0)
(define (obj-anim dt)
(set! rotX (+ rotX (/ dt 2)))
(set! rotY (+ rotY (/ dt 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))
)
(define (key-press key modifiers repeat?)
(cond
((eq? key 'q)
(abort-game))
((eq? key 'k)
(set! obj (cons (ustvari-objekt) obj)))
((eq? key 'r)
(load))))
(define stevec #f)
(define (reset-stevec!)
(set! stevec 1))
(define camera-position (vec3 0.0 0.0 3.0))
(define projection (perspective-projection (/ pi 3.0) (/ 4.0 3.0) 0.1 10.0))
(define view-matrix (make-identity-matrix4))
(define model-matrix (make-identity-matrix4))
(define tla-matrix (make-identity-matrix4))
(define position (vec3 0.0 0.0 -4.0))
(define (ustvari-tla)
(make-plane 0.002
0.002
(make-pbr-material #:base-color-factor (vec3 1.0 0 0)
#:polygon-mode point-polygon-mode)))
(define (ustvari-objekt)
(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 point-polygon-mode
#:metallic-factor 0.1))
;(make-plane velikost
; velikost
; (make-pbr-material))
))
(define obj #f)
(define tla #f)
(define (ustvari-nebo)
(let ((face (list
(u32vector #x4f0030f0
#x5f0040f0
#x6f0050f0
#x8f0060f0)
2
2)))
(make-skybox
(make-cube-map (make-list 6 face)))))
(define nebo #f)
(define (draw alpha)
(with-projection
projection
(with-graphics-state
((g:polygon-mode line-polygon-mode))
;(draw-skybox nebo view-matrix)
(map (lambda (o)
(draw-mesh o
#:model-matrix model-matrix
#:view-matrix view-matrix
#:camera-position position
#:skybox nebo
#:lights (list (ustvari-luc))))
obj)
(draw-mesh tla
#:model-matrix tla-matrix
#:view-matrix view-matrix
#:camera-position position
#:skybox nebo
#:lights (list (ustvari-luc)))
;(shader-apply my-shader kvadrat #:color red)
;; (draw-mesh
;; (make-mesh
;; 'kvadrat
;; (make-primitive
;; 'ploskev
;; (make-vertex-array
;; 0 0 0
;; 0 1 0
;; 0 1 1
;; 0 0 0)
;; (make-pbr-material #:base-color-factor (vec3 1.0 0.5 0)))))
)))
;(define my-shader (load-shader "vert.glsl" "frag.glsl"))
;(define kvadrat (make-vertex-array
;; :( ne dela?
(define (ustvari-luc)
(make-directional-light
#:direction (vec3 1 1 1)
#:color white
#:intensity 10))
(define (load)
;; Moramo pogledat model
(poglej)
(reset-stevec!)
(ustvari-luc)
(set! obj (list (ustvari-objekt)))
(set! tla (ustvari-tla))
(set! nebo (ustvari-nebo)))
(run-game
#:draw draw
#:update update
#:key-press key-press
#:load load)
;(reset-stevec!)