From 608939bff430cda65eddff290cdf5b9325256e63 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Fri, 6 Mar 2009 23:32:00 +0000 Subject: [PATCH] Scene-load setting light position based on the current transform git-svn-id: svn://anubis/fart/trunk@188 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- main/Scene-load.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/main/Scene-load.cc b/main/Scene-load.cc index e068100..2beec47 100644 --- a/main/Scene-load.cc +++ b/main/Scene-load.cc @@ -284,7 +284,7 @@ refptr Scene::processBox(refptr node) if ( ! material.isNull() ) box->setMaterial(material); box->setTransform(m_transforms.top()); - + if (restore_transform) m_transforms.pop(); @@ -321,7 +321,7 @@ refptr Scene::processCyl(refptr node) if ( ! material.isNull() ) cyl->setMaterial(material); cyl->setTransform(m_transforms.top()); - + if (restore_transform) m_transforms.pop(); @@ -338,7 +338,8 @@ refptr Scene::processLight(refptr node) { if ( typeid(**it) == typeid(PositionNode) ) { - light->setPosition((*it)->getVector()); + refptr v = (*it)->getVector(); + light->setPosition(m_transforms.top().transform_point(*v)); } else if ( typeid(**it) == typeid(DiffuseNode) ) { @@ -391,7 +392,7 @@ refptr Scene::processPlane(refptr node) if ( ! material.isNull() ) plane->setMaterial(material); plane->setTransform(m_transforms.top()); - + if (restore_transform) m_transforms.pop(); @@ -423,7 +424,7 @@ refptr Scene::processSphere(refptr node) if ( ! material.isNull() ) sphere->setMaterial(material); sphere->setTransform(m_transforms.top()); - + if (restore_transform) m_transforms.pop(); @@ -493,7 +494,7 @@ refptr Scene::processBool(refptr node) if ( ! material.isNull() ) shape->setMaterial(material); shape->setTransform(m_transforms.top()); - + if (restore_transform) m_transforms.pop();