From 7d9eb65fde383605e4decda8b0d01fdbe0b21263 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 15 Mar 2009 21:11:01 +0000 Subject: [PATCH] working on die scene, fixed bug in Scene-load for loading colors applied to lights git-svn-id: svn://anubis/fart/trunk@216 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- main/Scene-load.cc | 6 +- main/Scene.cc | 9 ++- scenes/die.fart | 156 +++++++++++++++++++++++++++++----------- scenes/trans-boxes.fart | 4 +- 4 files changed, 124 insertions(+), 51 deletions(-) diff --git a/main/Scene-load.cc b/main/Scene-load.cc index f568aac..8a9001c 100644 --- a/main/Scene-load.cc +++ b/main/Scene-load.cc @@ -375,17 +375,17 @@ refptr Scene::processLight(refptr node) } else if ( typeid(**it) == typeid(DiffuseNode) ) { - Color c(node->getVector()); + Color c((*it)->getVector()); light->setDiffuseColor(c); } else if ( typeid(**it) == typeid(SpecularNode) ) { - Color c(node->getVector()); + Color c((*it)->getVector()); light->setSpecularColor(c); } else if ( typeid(**it) == typeid(ColorNode) ) { - Color c(node->getVector()); + Color c((*it)->getVector()); light->setDiffuseColor(c); light->setSpecularColor(c); } diff --git a/main/Scene.cc b/main/Scene.cc index 5bd9a50..705cddb 100644 --- a/main/Scene.cc +++ b/main/Scene.cc @@ -26,7 +26,7 @@ Scene::Scene(const map & options, m_vfov = 60.0; m_verbose = true; m_data = NULL; - m_ambient_light = Color(0.1, 0.1, 0.1); + m_ambient_light = Color(0.2, 0.2, 0.2); m_max_depth = 10; m_transforms.push(Transform()); @@ -252,6 +252,9 @@ Color Scene::computePhong(const refptr material, double shininess = material->getShininess(); const Color & diffuseColor = material->getDiffuseColor(); const Color & specularColor = material->getSpecularColor(); + Vector normal = surfaceNormal; + if (normal % viewRay.getDirection() > 0.0) /* back face */ + normal = -normal; for (std::vector< refptr >::const_iterator it = m_lights.begin(); it != m_lights.end(); @@ -260,7 +263,7 @@ Color Scene::computePhong(const refptr material, Vector directionToLight = (*it)->getPosition() - surfacePoint; directionToLight.normalize(); Vector reflectedLightDirection = - directionToLight.reflect(surfaceNormal); + directionToLight.reflect(normal); Ray surfaceToLight(surfacePoint, directionToLight); Color light_contribution = @@ -271,7 +274,7 @@ Color Scene::computePhong(const refptr material, || light_contribution.b > 0.0 ) { /* calculate the diffuse term */ - double diffuse_coef = directionToLight % surfaceNormal; + double diffuse_coef = directionToLight % normal; if (diffuse_coef > 0.0) { result += diffuseColor diff --git a/scenes/die.fart b/scenes/die.fart index ef44f66..0930cdb 100644 --- a/scenes/die.fart +++ b/scenes/die.fart @@ -1,56 +1,126 @@ scene { + options + { + multisample 3 + } + camera { - position <1.5, -2.5, 1.5> + position <1.2, -2, 1.2> look_at <0, 0, 0> } - light + light { position <10, 4, 10> color <.7, .7, .7> } + light { position <-10, -5, 10> color <.7, .7, .7> } + + plane { position <0, 0, 1>, 0.501 } + + subtract { - position <10, 4, 10> - } - - plane - { - position <0, 0, 1>, 0.501 - } - - union - { - box { size <1, 0.8, 0.8> } - box { size <0.8, 1, 0.8> } - box { size <0.8, 0.8, 1> } - - cyl { size <0.1, 0.1, 0.8> translate <0.4, 0.4, -0.4> } - cyl { size <0.1, 0.1, 0.8> translate <0.4, -0.4, -0.4> } - cyl { size <0.1, 0.1, 0.8> translate <-0.4, 0.4, -0.4> } - cyl { size <0.1, 0.1, 0.8> translate <-0.4, -0.4, -0.4> } - - cyl { size <.1, .1, .8> translate <.4, -.4, .4> rotate -90, <1, 0, 0> } - cyl { size <.1, .1, .8> translate <.4, -.4, -.4> rotate -90, <1, 0, 0> } - cyl { size <.1, .1, .8> translate <-.4, -.4, .4> rotate -90, <1, 0, 0> } - cyl { size <.1, .1, .8> translate <-.4, -.4, -.4> rotate -90, <1, 0, 0> } - - cyl { size <.1, .1, .8> translate <.4, -.4, .4> rotate -90, <0, 1, 0> } - cyl { size <.1, .1, .8> translate <.4, -.4, -.4> rotate -90, <0, 1, 0> } - cyl { size <.1, .1, .8> translate <.4, .4, .4> rotate -90, <0, 1, 0> } - cyl { size <.1, .1, .8> translate <.4, .4, -.4> rotate -90, <0, 1, 0> } - - sphere { radius .1 translate <.4, .4, .4> } - sphere { radius .1 translate <.4, .4, -.4> } - sphere { radius .1 translate <.4, -.4, .4> } - sphere { radius .1 translate <.4, -.4, -.4> } - sphere { radius .1 translate <-.4, .4, .4> } - sphere { radius .1 translate <-.4, .4, -.4> } - sphere { radius .1 translate <-.4, -.4, .4> } - sphere { radius .1 translate <-.4, -.4, -.4> } - - material + union { - color <1, 0.2, 1> - transparency 0.5 + box { size <1, 0.8, 0.8> } + box { size <0.8, 1, 0.8> } + box { size <0.8, 0.8, 1> } + + cyl { size <0.1, 0.1, 0.8> translate <0.4, 0.4, -0.4> } + cyl { size <0.1, 0.1, 0.8> translate <0.4, -0.4, -0.4> } + cyl { size <0.1, 0.1, 0.8> translate <-0.4, 0.4, -0.4> } + cyl { size <0.1, 0.1, 0.8> translate <-0.4, -0.4, -0.4> } + + cyl { + size <.1, .1, .8> + translate <.4, -.4, .4> + rotate -90, <1, 0, 0> + } + cyl { + size <.1, .1, .8> + translate <.4, -.4, -.4> + rotate -90, <1, 0, 0> + } + cyl { + size <.1, .1, .8> + translate <-.4, -.4, .4> + rotate -90, <1, 0, 0> + } + cyl { + size <.1, .1, .8> + translate <-.4, -.4, -.4> + rotate -90, <1, 0, 0> + } + + cyl { + size <.1, .1, .8> + translate <.4, -.4, .4> + rotate -90, <0, 1, 0> + } + cyl { + size <.1, .1, .8> + translate <.4, -.4, -.4> + rotate -90, <0, 1, 0> + } + cyl { + size <.1, .1, .8> + translate <.4, .4, .4> + rotate -90, <0, 1, 0> + } + cyl { + size <.1, .1, .8> + translate <.4, .4, -.4> + rotate -90, <0, 1, 0> + } + + sphere { radius .1 translate <.4, .4, .4> } + sphere { radius .1 translate <.4, .4, -.4> } + sphere { radius .1 translate <.4, -.4, .4> } + sphere { radius .1 translate <.4, -.4, -.4> } + sphere { radius .1 translate <-.4, .4, .4> } + sphere { radius .1 translate <-.4, .4, -.4> } + sphere { radius .1 translate <-.4, -.4, .4> } + sphere { radius .1 translate <-.4, -.4, -.4> } + + material + { + color <1, 0.4, 1> + transparency 0.4 + } + } + + union + { + sphere { radius .1 translate <0, -.5, 0> } + + sphere { radius .1 translate <-.5, .25, -.25> } + sphere { radius .1 translate <-.5, -.25, .25> } + + sphere { radius .1 translate <0, 0, -.5> } + sphere { radius .1 translate <.25, -.25, -.5> } + sphere { radius .1 translate <-.25, .25, -.5> } + + sphere { radius .1 translate <-.25, -.25, .5> } + sphere { radius .1 translate <-.25, .25, .5> } + sphere { radius .1 translate <.25, -.25, .5> } + sphere { radius .1 translate <.25, .25, .5> } + + sphere { radius .1 translate <.5, 0, 0> } + sphere { radius .1 translate <.5, .25, .25> } + sphere { radius .1 translate <.5, .25, -.25> } + sphere { radius .1 translate <.5, -.25, .25> } + sphere { radius .1 translate <.5, -.25, -.25> } + + sphere { radius .1 translate <.25, .5, 0> } + sphere { radius .1 translate <.25, .5, -.25> } + sphere { radius .1 translate <.25, .5, .25> } + sphere { radius .1 translate <-.25, .5, 0> } + sphere { radius .1 translate <-.25, .5, -.25> } + sphere { radius .1 translate <-.25, .5, .25> } + + material + { + color <1, 1, 1> + } } } } diff --git a/scenes/trans-boxes.fart b/scenes/trans-boxes.fart index 95195f7..9b116ff 100644 --- a/scenes/trans-boxes.fart +++ b/scenes/trans-boxes.fart @@ -10,8 +10,8 @@ scene camera { - position <3, -4, 4> - look_at <0, 0, 0> + position <2, -2.5, 3> + look_at <-0.5, 0, 0> up <0, 0, 1> }