Next: , Previous: , Up: Graphics   [Contents][Index]

2.3.8 3D Models

Disclaimer: Chickadee is alpha software, but 3D model support is even more alpha than that. There are many missing features in both the model loading and rendering components, so set your expectations accordingly!

Chickadee can load and render 3D models in the classic OBJ and more modern glTF 2.0 formats.

Here’s some basic boilerplate to render a 3D model:

(use-modules (chickadee)
             (chickadee math)
             (chickadee math matrix)
             (chickadee render model))

(define model #f)
(define projection-matrix
  (perspective-projection (/ pi 3.0) (/ 4.0 3.0) 0.1 500.0))
;; Adjust these 2 matrices so that you can actually see the model.
(define view-matrix (make-identity-matrix4))
(define model-matrix (make-identity-matrix4))

(define (load)
  (set! model (load-obj "model.obj"))

(define (draw alpha)
  (with-projection projection-matrix
    (with-depth-test #t
      (draw-model model model-matrix view-matrix))))

(run-game #:load load #:draw draw)
Procedure: load-obj file-name

Load the OBJ formatted model in file-name and return a 3D model object.

OBJ models are rendered using a Phong lighting model, which is a work-in-progress.

Procedure: load-gltf file-name

Load the glTF 2.0 formatted model in file-name and return a 3D model object.

glTF models are rendered using a physically based lighting model, which is currently a stub to be implemented later.

Procedure: model? obj

Return #t if obj is a 3D model.

Procedure: draw-model model model-matrix view-matrix

Render model with the transformation matrices model-matrix and view-matrix applied.