From 88444e25b83cbb87dd31bc9df29f05c53c67c425 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Mon, 9 Mar 2009 00:09:33 +0000 Subject: [PATCH] added scenes/csg.fart, fixed bug in loading boolean objects in Scene-load.cc git-svn-id: svn://anubis/fart/trunk@196 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- main/Scene-load.cc | 6 +- scenes/csg.fart | 228 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 231 insertions(+), 3 deletions(-) create mode 100644 scenes/csg.fart diff --git a/main/Scene-load.cc b/main/Scene-load.cc index 93b488e..a3a4b77 100644 --- a/main/Scene-load.cc +++ b/main/Scene-load.cc @@ -471,13 +471,13 @@ refptr Scene::processBool(refptr node) it != node->getChildren().end(); it++) { - if ( node->isShape() ) + if ( (*it)->isShape() ) { switch (shapes_seen) { - case 0: shape1 = processShape(node); + case 0: shape1 = processShape(*it); break; - case 1: shape2 = processShape(node); + case 1: shape2 = processShape(*it); break; } shapes_seen++; diff --git a/scenes/csg.fart b/scenes/csg.fart new file mode 100644 index 0000000..e71712e --- /dev/null +++ b/scenes/csg.fart @@ -0,0 +1,228 @@ + +scene +{ + options + { + multisample 3 + } + + camera + { + position <3, -2.6, 2> + look_at <1.5, -1, 0> + up <0, 0, 1> + } + + light + { + position <-2, -5, 6> + } + + plane + { + position <1, -1, 1.5>, 3 + material + { + color <1, 1, 0> + } + } + + define material green + { + color <0, 1, 0> + shininess 3 + } + + subtract + { + intersect + { + box + { + size <1, 1, 1> + material + { + color <1, 0.4, 0.4> + } + } + + sphere + { + radius 0.67 + material + { + color <0, 0, 1> + shininess 3 + } + } + } + + union + { + cyl + { + size <0.35, 0.35, 1.2> + translate <0, 0, -0.6> + material green + } + + union + { + cyl + { + size <0.35, 0.35, 1.2> + rotate 90, <1, 0, 0> + translate <0, 0, -0.6> + material green + } + + cyl + { + size <0.35, 0.35, 1.2> + rotate 90, <0, 1, 0> + translate <0, 0, -0.6> + material green + } + } + } + } + + scale <0.5, 0.5, 0.5> + { + translate <0, -3, -2> + { + intersect + { + box + { + size <1, 1, 1> + material + { + color <1, 0.4, 0.4> + } + } + + sphere + { + radius 0.67 + material + { + color <0, 0, 1> + shininess 3 + } + } + } + + translate <0, -1.5, -1> + { + box + { + size <1, 1, 1> + material + { + color <1, 0.4, 0.4> + } + } + } + + translate <1.5, 0, -1> + { + sphere + { + radius 0.67 + material + { + color <0, 0, 1> + shininess 3 + } + } + } + } + + translate <3, 0, -2> + { + union + { + cyl + { + size <0.35, 0.35, 1.2> + translate <0, 0, -0.6> + material green + } + + union + { + cyl + { + size <0.35, 0.35, 1.2> + rotate 90, <1, 0, 0> + translate <0, 0, -0.6> + material green + } + + cyl + { + size <0.35, 0.35, 1.2> + rotate 90, <0, 1, 0> + translate <0, 0, -0.6> + material green + } + } + } + + translate <0, -1.5, -1> + { + cyl + { + size <0.35, 0.35, 1.2> + translate <0, 0, -0.6> + material green + } + } + + translate <1.5, 0, -1> + { + union + { + cyl + { + size <0.35, 0.35, 1.2> + rotate 90, <1, 0, 0> + translate <0, 0, -0.6> + material green + } + + cyl + { + size <0.35, 0.35, 1.2> + rotate 90, <0, 1, 0> + translate <0, 0, -0.6> + material green + } + } + + translate <0, -1.5, -1> + { + cyl + { + size <0.35, 0.35, 1.2> + rotate 90, <1, 0, 0> + translate <0, 0, -0.6> + material green + } + } + + translate <1.5, 0, -1> + { + cyl + { + size <0.35, 0.35, 1.2> + rotate 90, <0, 1, 0> + translate <0, 0, -0.6> + material green + } + } + } + } + } +}