From 1924bea5cf7fe5d7c765abe0f74b29e829ca063f Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sat, 28 Feb 2009 18:25:12 +0000 Subject: [PATCH] added color token to parser for specifying both diffuse and ambient color in a material, added ColorNode, switched color nodes to inherit from VectorNode git-svn-id: svn://anubis/fart/trunk@163 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- parser/nodes.h | 18 +++++++++++++++--- parser/parser.lex | 1 + parser/parser.yy | 21 ++++++++++----------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/parser/nodes.h b/parser/nodes.h index c50a361..e874b1a 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -58,8 +58,10 @@ class VectorNode : public Node }; -class AmbientNode : public Node +class AmbientNode : public VectorNode { + public: + AmbientNode(refptr vector) : VectorNode(vector) {} }; class BoxNode : public Node @@ -70,8 +72,16 @@ class CameraNode : public Node { }; -class DiffuseNode : public Node +class ColorNode : public VectorNode { + public: + ColorNode(refptr vector) : VectorNode(vector) {} +}; + +class DiffuseNode : public VectorNode +{ + public: + DiffuseNode(refptr vector) : VectorNode(vector) {} }; class HeightNode : public IntegerNode @@ -201,8 +211,10 @@ class SizeNode : public VectorNode SizeNode(refptr vector) : VectorNode(vector) {} }; -class SpecularNode : public Node +class SpecularNode : public VectorNode { + public: + SpecularNode(refptr vector) : VectorNode(vector) {} }; class SphereNode : public Node diff --git a/parser/parser.lex b/parser/parser.lex index b02c8ad..d6d2d66 100644 --- a/parser/parser.lex +++ b/parser/parser.lex @@ -42,6 +42,7 @@ ambient return AMBIENT; box return BOX; camera return CAMERA; +color return COLOR; diffuse return DIFFUSE; height return HEIGHT; intersect return INTERSECT; diff --git a/parser/parser.yy b/parser/parser.yy index 22fe4db..cbe2024 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -61,6 +61,7 @@ static refptr parsed_scene_node; %token AMBIENT; %token BOX; %token CAMERA; +%token COLOR; %token DIFFUSE; %token HEIGHT; %token INTERSECT; @@ -175,12 +176,10 @@ light_item: POSITION vector { $$->addChild($2); } | DIFFUSE vector { - $$ = new DiffuseNode(); - $$->addChild($2); + $$ = new DiffuseNode($2->getVector()); } | SPECULAR vector { - $$ = new SpecularNode(); - $$->addChild($2); + $$ = new SpecularNode($2->getVector()); } ; @@ -198,17 +197,17 @@ material_items: /* empty */ } ; -material_item: AMBIENT vector { - $$ = new AmbientNode(); - $$->addChild($2); +material_item: COLOR vector { + $$ = new ColorNode($2->getVector()); + } + | AMBIENT vector { + $$ = new AmbientNode($2->getVector()); } | DIFFUSE vector { - $$ = new DiffuseNode(); - $$->addChild($2); + $$ = new DiffuseNode($2->getVector()); } | SPECULAR vector { - $$ = new SpecularNode(); - $$->addChild($2); + $$ = new SpecularNode($2->getVector()); } | REFLECTANCE number { $$ = new ReflectanceNode($2->getNumber());