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!
The (chickadee graphics model)
module provides procedures to
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 graphics light) (chickadee graphics model) (chickadee graphics skybox)) (define model (load-gltf "Suzanne.gltf")) (define camera-position (vec3 0.0 0.0 3.0)) (define world (make-identity-matrix4)) (define view (look-at camera-position (vec3 0.0 0.0 0.0) (vec3 0.0 1.0 0.0))) (define projection (perspective-projection (/ pi 3.0) (/ 4.0 3.0) 0.1 5.0)) (define (draw alpha) (with-projection projection (draw-model model world view camera-position
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.
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.
Return #t
if obj is a 3D model.
Render model with the transformation matrices model-matrix and view-matrix applied. camera-position is the world position of the camera, for correct specular lighting calculations. skybox is used to apply ambient lighting to the model. lights contains all of the dynamic lights (see Lights) that should have an effect on the model.
Models are composed of simpler data types: meshes, primitives, and materials. Let’s start with materials. A material controls the appearance of a 3D object. Is the object a rough stone? Or maybe a smooth metal? Materials control all of this and more.
There are two types of materials in Chickadee: Phong and PBR.