From d615d6795ee81e59795081b7fb2524978b6aa9cb Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Fri, 30 Oct 2009 01:13:34 -0400 Subject: (Sort of) parse boxes. --- dimension/realize.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) (limited to 'dimension/realize.c') diff --git a/dimension/realize.c b/dimension/realize.c index 7f5e385..67536e6 100644 --- a/dimension/realize.c +++ b/dimension/realize.c @@ -22,7 +22,53 @@ #include "utility.h" dmnsn_scene * -dmnsn_realize(dmnsn_array *astree) +dmnsn_realize(const dmnsn_array *astree) { - return dmnsn_new_scene(); + dmnsn_scene *scene = dmnsn_new_scene(); + if (!scene) { + return NULL; + } + + /* Background color */ + dmnsn_sRGB background_sRGB = { .R = 0.0, .G = 0.05, .B = 0.1 }; + scene->background = dmnsn_color_from_sRGB(background_sRGB); + + /* Allocate a canvas */ + scene->canvas = dmnsn_new_canvas(768, 480); + if (!scene->canvas) { + dmnsn_delete_realized_scene(scene); + return NULL; + } + + /* Set up the transformation matrix for the perspective camera */ + dmnsn_matrix trans = dmnsn_scale_matrix( + dmnsn_vector_construct( + ((double)scene->canvas->x)/scene->canvas->y, 1.0, 1.0 + ) + ); + trans = dmnsn_matrix_mul( + dmnsn_translation_matrix(dmnsn_vector_construct(0.0, 0.0, -4.0)), + trans + ); + trans = dmnsn_matrix_mul( + dmnsn_rotation_matrix(dmnsn_vector_construct(0.0, 1.0, 0.0)), + trans + ); + + /* Create a perspective camera */ + scene->camera = dmnsn_new_perspective_camera(); + if (!scene->camera) { + dmnsn_delete_realized_scene(scene); + return NULL; + } + + return scene; +} + +void +dmnsn_delete_realized_scene(dmnsn_scene *scene) +{ + dmnsn_delete_camera(scene->camera); + dmnsn_delete_canvas(scene->canvas); + dmnsn_delete_scene(scene); } -- cgit v1.2.3