Scene-load setting light position based on the current transform

git-svn-id: svn://anubis/fart/trunk@188 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop 2009-03-06 23:32:00 +00:00
parent 24ef1eca3c
commit 608939bff4

View File

@ -284,7 +284,7 @@ refptr<Shape> Scene::processBox(refptr<Node> node)
if ( ! material.isNull() ) if ( ! material.isNull() )
box->setMaterial(material); box->setMaterial(material);
box->setTransform(m_transforms.top()); box->setTransform(m_transforms.top());
if (restore_transform) if (restore_transform)
m_transforms.pop(); m_transforms.pop();
@ -321,7 +321,7 @@ refptr<Shape> Scene::processCyl(refptr<Node> node)
if ( ! material.isNull() ) if ( ! material.isNull() )
cyl->setMaterial(material); cyl->setMaterial(material);
cyl->setTransform(m_transforms.top()); cyl->setTransform(m_transforms.top());
if (restore_transform) if (restore_transform)
m_transforms.pop(); m_transforms.pop();
@ -338,7 +338,8 @@ refptr<Light> Scene::processLight(refptr<Node> node)
{ {
if ( typeid(**it) == typeid(PositionNode) ) if ( typeid(**it) == typeid(PositionNode) )
{ {
light->setPosition((*it)->getVector()); refptr<Vector> v = (*it)->getVector();
light->setPosition(m_transforms.top().transform_point(*v));
} }
else if ( typeid(**it) == typeid(DiffuseNode) ) else if ( typeid(**it) == typeid(DiffuseNode) )
{ {
@ -391,7 +392,7 @@ refptr<Shape> Scene::processPlane(refptr<Node> node)
if ( ! material.isNull() ) if ( ! material.isNull() )
plane->setMaterial(material); plane->setMaterial(material);
plane->setTransform(m_transforms.top()); plane->setTransform(m_transforms.top());
if (restore_transform) if (restore_transform)
m_transforms.pop(); m_transforms.pop();
@ -423,7 +424,7 @@ refptr<Shape> Scene::processSphere(refptr<Node> node)
if ( ! material.isNull() ) if ( ! material.isNull() )
sphere->setMaterial(material); sphere->setMaterial(material);
sphere->setTransform(m_transforms.top()); sphere->setTransform(m_transforms.top());
if (restore_transform) if (restore_transform)
m_transforms.pop(); m_transforms.pop();
@ -493,7 +494,7 @@ refptr<Shape> Scene::processBool(refptr<Node> node)
if ( ! material.isNull() ) if ( ! material.isNull() )
shape->setMaterial(material); shape->setMaterial(material);
shape->setTransform(m_transforms.top()); shape->setTransform(m_transforms.top());
if (restore_transform) if (restore_transform)
m_transforms.pop(); m_transforms.pop();