added TranslateNode, RotateNode, and ScaleNode
git-svn-id: svn://anubis/fart/trunk@117 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
parent
2a816c1c1a
commit
0e22a21637
@ -152,6 +152,26 @@ class ReflectanceNode : public NumberNode
|
|||||||
ReflectanceNode(double d) : NumberNode(d) {}
|
ReflectanceNode(double d) : NumberNode(d) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class RotateNode : public VectorNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RotateNode(double angle, refptr<Vector> vector)
|
||||||
|
: VectorNode(vector)
|
||||||
|
{
|
||||||
|
m_angle = angle;
|
||||||
|
}
|
||||||
|
double getNumber() { return m_angle; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
double m_angle;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ScaleNode : public VectorNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ScaleNode(refptr<Vector> vector) : VectorNode(vector) {}
|
||||||
|
};
|
||||||
|
|
||||||
class SceneNode : public Node
|
class SceneNode : public Node
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
@ -184,6 +204,12 @@ class SubtractNode : public Node
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TranslateNode : public VectorNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TranslateNode(refptr<Vector> vector) : VectorNode(vector) {}
|
||||||
|
};
|
||||||
|
|
||||||
class UnionNode : public Node
|
class UnionNode : public Node
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
@ -53,12 +53,15 @@ plane return PLANE;
|
|||||||
position return POSITION;
|
position return POSITION;
|
||||||
radius return RADIUS;
|
radius return RADIUS;
|
||||||
reflectance return REFLECTANCE;
|
reflectance return REFLECTANCE;
|
||||||
|
rotate return ROTATE;
|
||||||
|
scale return SCALE;
|
||||||
scene return SCENE;
|
scene return SCENE;
|
||||||
shininess return SHININESS;
|
shininess return SHININESS;
|
||||||
size return SIZE;
|
size return SIZE;
|
||||||
specular return SPECULAR;
|
specular return SPECULAR;
|
||||||
sphere return SPHERE;
|
sphere return SPHERE;
|
||||||
subtract return SUBTRACT;
|
subtract return SUBTRACT;
|
||||||
|
translate return TRANSLATE;
|
||||||
union return UNION;
|
union return UNION;
|
||||||
up return UP;
|
up return UP;
|
||||||
vfov return VFOV;
|
vfov return VFOV;
|
||||||
|
@ -26,7 +26,6 @@ int yywrap()
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Scene * g_scene;
|
static Scene * g_scene;
|
||||||
|
|
||||||
%}
|
%}
|
||||||
@ -73,12 +72,15 @@ static Scene * g_scene;
|
|||||||
%token POSITION;
|
%token POSITION;
|
||||||
%token RADIUS;
|
%token RADIUS;
|
||||||
%token REFLECTANCE;
|
%token REFLECTANCE;
|
||||||
|
%token ROTATE;
|
||||||
|
%token SCALE;
|
||||||
%token SCENE;
|
%token SCENE;
|
||||||
%token SHININESS;
|
%token SHININESS;
|
||||||
%token SIZE;
|
%token SIZE;
|
||||||
%token SPECULAR;
|
%token SPECULAR;
|
||||||
%token SPHERE;
|
%token SPHERE;
|
||||||
%token SUBTRACT;
|
%token SUBTRACT;
|
||||||
|
%token TRANSLATE;
|
||||||
%token UNION;
|
%token UNION;
|
||||||
%token UP;
|
%token UP;
|
||||||
%token VFOV;
|
%token VFOV;
|
||||||
@ -300,6 +302,7 @@ shape_items: /* empty */
|
|||||||
;
|
;
|
||||||
|
|
||||||
shape_item: material { $$ = $1; }
|
shape_item: material { $$ = $1; }
|
||||||
|
| transform { $$ = $1; }
|
||||||
;
|
;
|
||||||
|
|
||||||
sphere: SPHERE LCURLY sphere_items RCURLY {
|
sphere: SPHERE LCURLY sphere_items RCURLY {
|
||||||
@ -328,6 +331,17 @@ subtract: SUBTRACT LCURLY shape shape shape_items RCURLY {
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
transform: TRANSLATE vector {
|
||||||
|
$$ = new TranslateNode($2->getVector());
|
||||||
|
}
|
||||||
|
| ROTATE number COMMA vector {
|
||||||
|
$$ = new RotateNode($2->getNumber(), $4->getVector());
|
||||||
|
}
|
||||||
|
| SCALE vector {
|
||||||
|
$$ = new ScaleNode($2->getVector());
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
union: UNION LCURLY shape shape shape_items RCURLY {
|
union: UNION LCURLY shape shape shape_items RCURLY {
|
||||||
$$ = new UnionNode();
|
$$ = new UnionNode();
|
||||||
$$->addChild($3);
|
$$->addChild($3);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user