wavey-wind/anim.scm

190 lines
5.0 KiB
Scheme
Raw Permalink Normal View History

2022-11-23 04:14:31 +01:00
(use-modules (chickadee)
(chickadee graphics color)
(chickadee graphics text)
2022-11-23 07:31:55 +01:00
(chickadee graphics pbr)
2023-03-04 16:34:00 +01:00
(chickadee graphics phong)
2022-11-23 07:31:55 +01:00
(chickadee graphics mesh)
2023-05-11 19:03:54 +02:00
(chickadee graphics engine)
(chickadee graphics model)
(chickadee graphics light)
(chickadee graphics skybox)
2023-03-04 16:34:00 +01:00
(chickadee graphics polygon)
(chickadee graphics shader)
(chickadee graphics buffer)
2023-05-11 19:03:54 +02:00
(chickadee graphics texture)
2022-12-14 01:13:25 +01:00
(chickadee math)
2022-11-23 04:14:31 +01:00
(chickadee math vector)
2022-12-14 01:13:25 +01:00
(chickadee math matrix)
2022-11-23 04:14:31 +01:00
(system repl coop-server))
2023-05-11 19:03:54 +02:00
;; Hitra pomoc:
;;
;; chickadee play anim.scm --repl-server
;; ^ pozene fajl z repl serverjem v ozadju
;;
;;
2022-11-23 04:14:31 +01:00
(define repl (spawn-coop-repl-server))
2022-11-23 08:32:45 +01:00
(define (poglej)
(look-at! view-matrix
position
(vec3+ position (vec3 0.0 0.0 1.0))
(vec3 0.0 1.0 0.0)))
2022-11-23 04:14:31 +01:00
(define (update dt)
2022-11-23 08:32:45 +01:00
;; REPL!
(poll-coop-repl-server repl)
;; Stevec gor
2022-11-23 07:31:55 +01:00
(set! stevec (+ stevec 1))
(display (string-append (number->string stevec) "\n"))
2022-11-23 08:32:45 +01:00
(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)))
2022-12-14 01:13:25 +01:00
(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)
2022-12-14 01:13:25 +01:00
(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))
)
2022-11-23 07:31:55 +01:00
(define (key-press key modifiers repeat?)
(cond
((eq? key 'q)
(abort-game))
2023-03-04 16:34:00 +01:00
((eq? key 'k)
(set! obj (cons (ustvari-objekt) obj)))
2022-11-23 07:31:55 +01:00
((eq? key 'r)
2023-03-04 16:34:00 +01:00
(load))))
2022-11-23 04:14:31 +01:00
2022-11-23 08:32:45 +01:00
(define stevec #f)
2022-11-23 04:14:31 +01:00
2023-05-11 19:03:54 +02:00
(define (reset-stevec!)
2022-11-23 08:32:45 +01:00
(set! stevec 1))
2022-11-23 04:14:31 +01:00
2022-11-23 07:31:55 +01:00
(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))
2022-11-23 07:31:55 +01:00
(define view-matrix (make-identity-matrix4))
(define model-matrix (make-identity-matrix4))
2022-12-14 01:13:25 +01:00
(define tla-matrix (make-identity-matrix4))
2022-11-23 07:31:55 +01:00
(define position (vec3 0.0 0.0 -4.0))
(define (ustvari-tla)
2023-03-04 16:34:00 +01:00
(make-plane 0.002
0.002
(make-pbr-material #:base-color-factor (vec3 1.0 0 0)
#:polygon-mode point-polygon-mode)))
2022-11-23 08:32:45 +01:00
(define (ustvari-objekt)
(let ((velikost (/ stevec 2000.0))
(barva (vec3 0.2 0.8 0.4)))
2022-11-23 08:32:45 +01:00
(make-cube velikost
2023-03-04 16:34:00 +01:00
(make-pbr-material #:base-color-factor barva
#:polygon-mode point-polygon-mode
2023-03-04 16:34:00 +01:00
#:metallic-factor 0.1))
2022-11-23 08:32:45 +01:00
;(make-plane velikost
; velikost
; (make-pbr-material))
))
(define obj #f)
2022-12-14 01:13:25 +01:00
(define tla #f)
2022-11-23 08:32:45 +01:00
(define (ustvari-nebo)
(let ((face (list
2023-03-04 16:34:00 +01:00
(u32vector #x4f0030f0
#x5f0040f0
#x6f0050f0
#x8f0060f0)
2
2)))
(make-skybox
(make-cube-map (make-list 6 face)))))
2023-05-11 19:03:54 +02:00
(define nebo #f)
2023-03-04 16:34:00 +01:00
2022-11-23 07:31:55 +01:00
(define (draw alpha)
2023-03-04 16:34:00 +01:00
(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
2022-11-23 07:31:55 +01:00
;; :( ne dela?
(define (ustvari-luc)
(make-directional-light
#:direction (vec3 1 1 1)
#:color white
#:intensity 10))
2022-11-23 08:32:45 +01:00
(define (load)
;; Moramo pogledat model
(poglej)
2023-05-11 19:03:54 +02:00
(reset-stevec!)
(ustvari-luc)
2023-03-04 16:34:00 +01:00
(set! obj (list (ustvari-objekt)))
2023-05-11 19:03:54 +02:00
(set! tla (ustvari-tla))
(set! nebo (ustvari-nebo)))
2022-11-23 04:14:31 +01:00
(run-game
#:draw draw
2022-11-23 07:31:55 +01:00
#:update update
2022-11-23 08:32:45 +01:00
#:key-press key-press
#:load load)
2023-05-11 19:03:54 +02:00
;(reset-stevec!)