From 5a837861034a495394549921bcda7859ee6d09bf Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sat, 28 Feb 2009 20:39:29 +0000 Subject: [PATCH] filled out Scene::processPlane() git-svn-id: svn://anubis/fart/trunk@166 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- main/Scene-load.cc | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/main/Scene-load.cc b/main/Scene-load.cc index b3cccac..10461d6 100644 --- a/main/Scene-load.cc +++ b/main/Scene-load.cc @@ -265,8 +265,39 @@ refptr Scene::processLight(refptr node) refptr Scene::processPlane(refptr node) { - /* TODO: finish */ - return refptr(NULL); + Vector normal(0, 0, 1); + double dist = 0; + refptr material; + + bool restore_transform = processTransforms(node); + + for (Node_Iterator it = node->getChildren().begin(); + it != node->getChildren().end(); + it++) + { + if ( typeid(**it) == typeid(PlanePositionNode) ) + { + normal = *(*it)->getVector(); + dist = (*it)->getNumber(); + } + else if ( typeid(**it) == typeid(MaterialNode) ) + { + material = processMaterial(*it); + } + } + + refptr plane = new Plane(normal[0], + normal[1], + normal[2], + dist); + if ( ! material.isNull() ) + plane->setMaterial(material); + plane->setTransform(m_transforms.top()); + + if (restore_transform) + m_transforms.pop(); + + return plane; } refptr Scene::processSphere(refptr node)