added extrude, offset, polygon, ngon to parser; changed items accepting SCALE vector to also accept SCALE number (ex: "scale 3.2" instead of "scale <3.2, 3.2, 3.2>")
git-svn-id: svn://anubis/fart/trunk@268 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
parent
d6c0bf7a25
commit
ad017df3b5
@ -108,6 +108,12 @@ class ExposureNode : public NumberNode
|
||||
ExposureNode(double d) : NumberNode(d) {}
|
||||
};
|
||||
|
||||
class ExtrudeNode : public Node
|
||||
{
|
||||
public:
|
||||
bool isShape() { return true; }
|
||||
};
|
||||
|
||||
class HeightNode : public IntegerNode
|
||||
{
|
||||
public:
|
||||
@ -183,6 +189,18 @@ class MultisampleNode : public IntegerNode
|
||||
MultisampleNode(int i) : IntegerNode(i) {}
|
||||
};
|
||||
|
||||
class NGonNode : public IntegerNode
|
||||
{
|
||||
public:
|
||||
NGonNode(int i) : IntegerNode(i) {}
|
||||
};
|
||||
|
||||
class OffsetNode : public NumberNode
|
||||
{
|
||||
public:
|
||||
OffsetNode(double d) : NumberNode(d) {}
|
||||
};
|
||||
|
||||
class OptionsNode : public Node
|
||||
{
|
||||
};
|
||||
@ -209,6 +227,10 @@ class PlanePositionNode : public Node
|
||||
double m_dist;
|
||||
};
|
||||
|
||||
class PolygonNode : public Node
|
||||
{
|
||||
};
|
||||
|
||||
class PositionNode : public VectorNode
|
||||
{
|
||||
public:
|
||||
|
@ -48,6 +48,7 @@ cyl return CYL;
|
||||
define return DEFINE;
|
||||
diffuse return DIFFUSE;
|
||||
exposure return EXPOSURE;
|
||||
extrude return EXTRUDE;
|
||||
height return HEIGHT;
|
||||
intersect return INTERSECT;
|
||||
jitter return JITTER;
|
||||
@ -56,8 +57,11 @@ look_at return LOOKAT;
|
||||
material return MATERIAL;
|
||||
max_depth return MAXDEPTH;
|
||||
multisample return MULTISAMPLE;
|
||||
ngon return NGON;
|
||||
offset return OFFSET;
|
||||
options return OPTIONS;
|
||||
plane return PLANE;
|
||||
polygon return POLYGON;
|
||||
position return POSITION;
|
||||
radius return RADIUS;
|
||||
reflectance return REFLECTANCE;
|
||||
|
114
parser/parser.yy
114
parser/parser.yy
@ -67,6 +67,7 @@ static refptr<Node> parsed_scene_node;
|
||||
%token DEFINE;
|
||||
%token DIFFUSE;
|
||||
%token EXPOSURE;
|
||||
%token EXTRUDE;
|
||||
%token HEIGHT;
|
||||
%token INTERSECT;
|
||||
%token JITTER;
|
||||
@ -75,8 +76,11 @@ static refptr<Node> parsed_scene_node;
|
||||
%token MATERIAL;
|
||||
%token MAXDEPTH;
|
||||
%token MULTISAMPLE;
|
||||
%token NGON;
|
||||
%token OFFSET;
|
||||
%token OPTIONS;
|
||||
%token PLANE;
|
||||
%token POLYGON;
|
||||
%token POSITION;
|
||||
%token RADIUS;
|
||||
%token REFLECTANCE;
|
||||
@ -132,7 +136,7 @@ box_items: /* empty */
|
||||
}
|
||||
;
|
||||
|
||||
box_item: SIZE vector {
|
||||
box_item: SIZE vector3 {
|
||||
$$ = new SizeNode($2->getVector());
|
||||
}
|
||||
| shape_item { $$ = $1; }
|
||||
@ -152,13 +156,13 @@ camera_items: /* empty */
|
||||
}
|
||||
;
|
||||
|
||||
camera_item: POSITION vector {
|
||||
camera_item: POSITION vector3 {
|
||||
$$ = new PositionNode($2->getVector());
|
||||
}
|
||||
| LOOKAT vector {
|
||||
| LOOKAT vector3 {
|
||||
$$ = new LookAtNode($2->getVector());
|
||||
}
|
||||
| UP vector {
|
||||
| UP vector3 {
|
||||
$$ = new UpNode($2->getVector());
|
||||
}
|
||||
| VFOV number {
|
||||
@ -180,12 +184,31 @@ cyl_items: /* empty */
|
||||
}
|
||||
;
|
||||
|
||||
cyl_item: SIZE vector {
|
||||
cyl_item: SIZE vector3 {
|
||||
$$ = new SizeNode($2->getVector());
|
||||
}
|
||||
| shape_item { $$ = $1; }
|
||||
;
|
||||
|
||||
extrude: EXTRUDE LCURLY extrude_items RCURLY {
|
||||
$$ = new ExtrudeNode();
|
||||
$$->addChildren($3);
|
||||
}
|
||||
;
|
||||
|
||||
extrude_items: /* empty */
|
||||
| extrude_item extrude_items {
|
||||
$$ = new ItemsNode();
|
||||
$$->addChild($1);
|
||||
$$->addChildren($2);
|
||||
}
|
||||
;
|
||||
|
||||
extrude_item: polygon { $$ = $1; }
|
||||
| ngon { $$ = $1; }
|
||||
| offset { $$ = $1; }
|
||||
;
|
||||
|
||||
intersect: INTERSECT LCURLY bool_items RCURLY {
|
||||
$$ = new IntersectNode();
|
||||
$$->addChildren($3);
|
||||
@ -211,16 +234,16 @@ light_items: /* empty */
|
||||
}
|
||||
;
|
||||
|
||||
light_item: POSITION vector {
|
||||
light_item: POSITION vector3 {
|
||||
$$ = new PositionNode($2->getVector());
|
||||
}
|
||||
| DIFFUSE vector {
|
||||
| DIFFUSE vector3 {
|
||||
$$ = new DiffuseNode($2->getVector());
|
||||
}
|
||||
| SPECULAR vector {
|
||||
| SPECULAR vector3 {
|
||||
$$ = new SpecularNode($2->getVector());
|
||||
}
|
||||
| COLOR vector {
|
||||
| COLOR vector3 {
|
||||
$$ = new ColorNode($2->getVector());
|
||||
}
|
||||
| radius {
|
||||
@ -245,16 +268,16 @@ material_items: /* empty */
|
||||
}
|
||||
;
|
||||
|
||||
material_item: COLOR vector {
|
||||
material_item: COLOR vector3 {
|
||||
$$ = new ColorNode($2->getVector());
|
||||
}
|
||||
| AMBIENT vector {
|
||||
| AMBIENT vector3 {
|
||||
$$ = new AmbientNode($2->getVector());
|
||||
}
|
||||
| DIFFUSE vector {
|
||||
| DIFFUSE vector3 {
|
||||
$$ = new DiffuseNode($2->getVector());
|
||||
}
|
||||
| SPECULAR vector {
|
||||
| SPECULAR vector3 {
|
||||
$$ = new SpecularNode($2->getVector());
|
||||
}
|
||||
| REFLECTANCE number {
|
||||
@ -283,6 +306,12 @@ number: DEC_NUMBER { $$ = $1; }
|
||||
| REAL_NUMBER { $$ = $1; }
|
||||
;
|
||||
|
||||
ngon: NGON DEC_NUMBER { $$ = new NGonNode($2->getInteger()); }
|
||||
;
|
||||
|
||||
offset: OFFSET number { $$ = new OffsetNode($2->getNumber()); }
|
||||
;
|
||||
|
||||
options: OPTIONS LCURLY options_items RCURLY {
|
||||
$$ = new OptionsNode();
|
||||
$$->addChildren($3);
|
||||
@ -312,7 +341,7 @@ options_item: WIDTH DEC_NUMBER {
|
||||
| EXPOSURE number {
|
||||
$$ = new ExposureNode($2->getNumber());
|
||||
}
|
||||
| AMBIENT vector {
|
||||
| AMBIENT vector3 {
|
||||
$$ = new AmbientNode($2->getVector());
|
||||
}
|
||||
| AMBIENT_OCCLUSION DEC_NUMBER {
|
||||
@ -334,12 +363,29 @@ plane_items: /* empty */
|
||||
}
|
||||
;
|
||||
|
||||
plane_item: POSITION vector COMMA number {
|
||||
plane_item: POSITION vector3 COMMA number {
|
||||
$$ = new PlanePositionNode($2->getVector(), $4->getNumber());
|
||||
}
|
||||
| shape_item { $$ = $1; }
|
||||
;
|
||||
|
||||
polygon: POLYGON LCURLY polygon_items RCURLY {
|
||||
$$ = new PolygonNode();
|
||||
$$->addChildren($3);
|
||||
}
|
||||
;
|
||||
|
||||
polygon_items: /* empty */
|
||||
| polygon_item polygon_items {
|
||||
$$ = new ItemsNode();
|
||||
$$->addChild($1);
|
||||
$$->addChildren($2);
|
||||
}
|
||||
;
|
||||
|
||||
polygon_item: vector2 { $$ = $1; }
|
||||
;
|
||||
|
||||
radius: RADIUS number {
|
||||
$$ = new RadiusNode($2->getNumber());
|
||||
}
|
||||
@ -368,6 +414,7 @@ shape: plane { $$ = $1; }
|
||||
| union { $$ = $1; }
|
||||
| intersect { $$ = $1; }
|
||||
| subtract { $$ = $1; }
|
||||
| extrude { $$ = $1; }
|
||||
;
|
||||
|
||||
shape_item: material { $$ = $1; }
|
||||
@ -399,29 +446,39 @@ subtract: SUBTRACT LCURLY bool_items RCURLY {
|
||||
}
|
||||
;
|
||||
|
||||
transform: TRANSLATE vector {
|
||||
transform: TRANSLATE vector3 {
|
||||
$$ = new TranslateNode($2->getVector());
|
||||
}
|
||||
| ROTATE number COMMA vector {
|
||||
| ROTATE number COMMA vector3 {
|
||||
$$ = new RotateNode($2->getNumber(), $4->getVector());
|
||||
}
|
||||
| SCALE vector {
|
||||
| SCALE vector3 {
|
||||
$$ = new ScaleNode($2->getVector());
|
||||
}
|
||||
| SCALE number {
|
||||
$$ = new ScaleNode(new Vector($2->getNumber(),
|
||||
$2->getNumber(), $2->getNumber()));
|
||||
}
|
||||
;
|
||||
|
||||
transform_block: TRANSLATE vector LCURLY transform_block_items RCURLY {
|
||||
transform_block: TRANSLATE vector3 LCURLY transform_block_items RCURLY {
|
||||
$$ = new TranslateBlockNode($2->getVector());
|
||||
$$->addChildren($4);
|
||||
}
|
||||
| ROTATE number COMMA vector LCURLY transform_block_items RCURLY {
|
||||
| ROTATE number COMMA vector3 LCURLY transform_block_items RCURLY {
|
||||
$$ = new RotateBlockNode($2->getNumber(), $4->getVector());
|
||||
$$->addChildren($6);
|
||||
}
|
||||
| SCALE vector LCURLY transform_block_items RCURLY {
|
||||
| SCALE vector3 LCURLY transform_block_items RCURLY {
|
||||
$$ = new ScaleBlockNode($2->getVector());
|
||||
$$->addChildren($4);
|
||||
}
|
||||
| SCALE number LCURLY transform_block_items RCURLY {
|
||||
$$ = new ScaleBlockNode(
|
||||
new Vector($2->getNumber(), $2->getNumber(),
|
||||
$2->getNumber()));
|
||||
$$->addChildren($4);
|
||||
}
|
||||
;
|
||||
|
||||
transform_block_items: /* empty */
|
||||
@ -443,11 +500,16 @@ union: UNION LCURLY bool_items RCURLY {
|
||||
}
|
||||
;
|
||||
|
||||
vector: LESS number COMMA number COMMA number GREATER {
|
||||
refptr<Vector> vec = new Vector();
|
||||
(*vec)[0] = $2->getNumber();
|
||||
(*vec)[1] = $4->getNumber();
|
||||
(*vec)[2] = $6->getNumber();
|
||||
vector2: LESS number COMMA number GREATER {
|
||||
refptr<Vector> vec =
|
||||
new Vector($2->getNumber(), $4->getNumber(), 0.0);
|
||||
$$ = new VectorNode(vec);
|
||||
}
|
||||
;
|
||||
|
||||
vector3: LESS number COMMA number COMMA number GREATER {
|
||||
refptr<Vector> vec =
|
||||
new Vector($2->getNumber(), $4->getNumber(), $6->getNumber());
|
||||
$$ = new VectorNode(vec);
|
||||
}
|
||||
;
|
||||
|
Loading…
x
Reference in New Issue
Block a user