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) {}
|
ExposureNode(double d) : NumberNode(d) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ExtrudeNode : public Node
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool isShape() { return true; }
|
||||||
|
};
|
||||||
|
|
||||||
class HeightNode : public IntegerNode
|
class HeightNode : public IntegerNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -183,6 +189,18 @@ class MultisampleNode : public IntegerNode
|
|||||||
MultisampleNode(int i) : IntegerNode(i) {}
|
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
|
class OptionsNode : public Node
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
@ -209,6 +227,10 @@ class PlanePositionNode : public Node
|
|||||||
double m_dist;
|
double m_dist;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class PolygonNode : public Node
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
class PositionNode : public VectorNode
|
class PositionNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -48,6 +48,7 @@ cyl return CYL;
|
|||||||
define return DEFINE;
|
define return DEFINE;
|
||||||
diffuse return DIFFUSE;
|
diffuse return DIFFUSE;
|
||||||
exposure return EXPOSURE;
|
exposure return EXPOSURE;
|
||||||
|
extrude return EXTRUDE;
|
||||||
height return HEIGHT;
|
height return HEIGHT;
|
||||||
intersect return INTERSECT;
|
intersect return INTERSECT;
|
||||||
jitter return JITTER;
|
jitter return JITTER;
|
||||||
@ -56,8 +57,11 @@ look_at return LOOKAT;
|
|||||||
material return MATERIAL;
|
material return MATERIAL;
|
||||||
max_depth return MAXDEPTH;
|
max_depth return MAXDEPTH;
|
||||||
multisample return MULTISAMPLE;
|
multisample return MULTISAMPLE;
|
||||||
|
ngon return NGON;
|
||||||
|
offset return OFFSET;
|
||||||
options return OPTIONS;
|
options return OPTIONS;
|
||||||
plane return PLANE;
|
plane return PLANE;
|
||||||
|
polygon return POLYGON;
|
||||||
position return POSITION;
|
position return POSITION;
|
||||||
radius return RADIUS;
|
radius return RADIUS;
|
||||||
reflectance return REFLECTANCE;
|
reflectance return REFLECTANCE;
|
||||||
|
114
parser/parser.yy
114
parser/parser.yy
@ -67,6 +67,7 @@ static refptr<Node> parsed_scene_node;
|
|||||||
%token DEFINE;
|
%token DEFINE;
|
||||||
%token DIFFUSE;
|
%token DIFFUSE;
|
||||||
%token EXPOSURE;
|
%token EXPOSURE;
|
||||||
|
%token EXTRUDE;
|
||||||
%token HEIGHT;
|
%token HEIGHT;
|
||||||
%token INTERSECT;
|
%token INTERSECT;
|
||||||
%token JITTER;
|
%token JITTER;
|
||||||
@ -75,8 +76,11 @@ static refptr<Node> parsed_scene_node;
|
|||||||
%token MATERIAL;
|
%token MATERIAL;
|
||||||
%token MAXDEPTH;
|
%token MAXDEPTH;
|
||||||
%token MULTISAMPLE;
|
%token MULTISAMPLE;
|
||||||
|
%token NGON;
|
||||||
|
%token OFFSET;
|
||||||
%token OPTIONS;
|
%token OPTIONS;
|
||||||
%token PLANE;
|
%token PLANE;
|
||||||
|
%token POLYGON;
|
||||||
%token POSITION;
|
%token POSITION;
|
||||||
%token RADIUS;
|
%token RADIUS;
|
||||||
%token REFLECTANCE;
|
%token REFLECTANCE;
|
||||||
@ -132,7 +136,7 @@ box_items: /* empty */
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
box_item: SIZE vector {
|
box_item: SIZE vector3 {
|
||||||
$$ = new SizeNode($2->getVector());
|
$$ = new SizeNode($2->getVector());
|
||||||
}
|
}
|
||||||
| shape_item { $$ = $1; }
|
| shape_item { $$ = $1; }
|
||||||
@ -152,13 +156,13 @@ camera_items: /* empty */
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
camera_item: POSITION vector {
|
camera_item: POSITION vector3 {
|
||||||
$$ = new PositionNode($2->getVector());
|
$$ = new PositionNode($2->getVector());
|
||||||
}
|
}
|
||||||
| LOOKAT vector {
|
| LOOKAT vector3 {
|
||||||
$$ = new LookAtNode($2->getVector());
|
$$ = new LookAtNode($2->getVector());
|
||||||
}
|
}
|
||||||
| UP vector {
|
| UP vector3 {
|
||||||
$$ = new UpNode($2->getVector());
|
$$ = new UpNode($2->getVector());
|
||||||
}
|
}
|
||||||
| VFOV number {
|
| VFOV number {
|
||||||
@ -180,12 +184,31 @@ cyl_items: /* empty */
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
cyl_item: SIZE vector {
|
cyl_item: SIZE vector3 {
|
||||||
$$ = new SizeNode($2->getVector());
|
$$ = new SizeNode($2->getVector());
|
||||||
}
|
}
|
||||||
| shape_item { $$ = $1; }
|
| 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 {
|
intersect: INTERSECT LCURLY bool_items RCURLY {
|
||||||
$$ = new IntersectNode();
|
$$ = new IntersectNode();
|
||||||
$$->addChildren($3);
|
$$->addChildren($3);
|
||||||
@ -211,16 +234,16 @@ light_items: /* empty */
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
light_item: POSITION vector {
|
light_item: POSITION vector3 {
|
||||||
$$ = new PositionNode($2->getVector());
|
$$ = new PositionNode($2->getVector());
|
||||||
}
|
}
|
||||||
| DIFFUSE vector {
|
| DIFFUSE vector3 {
|
||||||
$$ = new DiffuseNode($2->getVector());
|
$$ = new DiffuseNode($2->getVector());
|
||||||
}
|
}
|
||||||
| SPECULAR vector {
|
| SPECULAR vector3 {
|
||||||
$$ = new SpecularNode($2->getVector());
|
$$ = new SpecularNode($2->getVector());
|
||||||
}
|
}
|
||||||
| COLOR vector {
|
| COLOR vector3 {
|
||||||
$$ = new ColorNode($2->getVector());
|
$$ = new ColorNode($2->getVector());
|
||||||
}
|
}
|
||||||
| radius {
|
| radius {
|
||||||
@ -245,16 +268,16 @@ material_items: /* empty */
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
material_item: COLOR vector {
|
material_item: COLOR vector3 {
|
||||||
$$ = new ColorNode($2->getVector());
|
$$ = new ColorNode($2->getVector());
|
||||||
}
|
}
|
||||||
| AMBIENT vector {
|
| AMBIENT vector3 {
|
||||||
$$ = new AmbientNode($2->getVector());
|
$$ = new AmbientNode($2->getVector());
|
||||||
}
|
}
|
||||||
| DIFFUSE vector {
|
| DIFFUSE vector3 {
|
||||||
$$ = new DiffuseNode($2->getVector());
|
$$ = new DiffuseNode($2->getVector());
|
||||||
}
|
}
|
||||||
| SPECULAR vector {
|
| SPECULAR vector3 {
|
||||||
$$ = new SpecularNode($2->getVector());
|
$$ = new SpecularNode($2->getVector());
|
||||||
}
|
}
|
||||||
| REFLECTANCE number {
|
| REFLECTANCE number {
|
||||||
@ -283,6 +306,12 @@ number: DEC_NUMBER { $$ = $1; }
|
|||||||
| REAL_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 {
|
options: OPTIONS LCURLY options_items RCURLY {
|
||||||
$$ = new OptionsNode();
|
$$ = new OptionsNode();
|
||||||
$$->addChildren($3);
|
$$->addChildren($3);
|
||||||
@ -312,7 +341,7 @@ options_item: WIDTH DEC_NUMBER {
|
|||||||
| EXPOSURE number {
|
| EXPOSURE number {
|
||||||
$$ = new ExposureNode($2->getNumber());
|
$$ = new ExposureNode($2->getNumber());
|
||||||
}
|
}
|
||||||
| AMBIENT vector {
|
| AMBIENT vector3 {
|
||||||
$$ = new AmbientNode($2->getVector());
|
$$ = new AmbientNode($2->getVector());
|
||||||
}
|
}
|
||||||
| AMBIENT_OCCLUSION DEC_NUMBER {
|
| 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());
|
$$ = new PlanePositionNode($2->getVector(), $4->getNumber());
|
||||||
}
|
}
|
||||||
| shape_item { $$ = $1; }
|
| 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 {
|
radius: RADIUS number {
|
||||||
$$ = new RadiusNode($2->getNumber());
|
$$ = new RadiusNode($2->getNumber());
|
||||||
}
|
}
|
||||||
@ -368,6 +414,7 @@ shape: plane { $$ = $1; }
|
|||||||
| union { $$ = $1; }
|
| union { $$ = $1; }
|
||||||
| intersect { $$ = $1; }
|
| intersect { $$ = $1; }
|
||||||
| subtract { $$ = $1; }
|
| subtract { $$ = $1; }
|
||||||
|
| extrude { $$ = $1; }
|
||||||
;
|
;
|
||||||
|
|
||||||
shape_item: material { $$ = $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());
|
$$ = new TranslateNode($2->getVector());
|
||||||
}
|
}
|
||||||
| ROTATE number COMMA vector {
|
| ROTATE number COMMA vector3 {
|
||||||
$$ = new RotateNode($2->getNumber(), $4->getVector());
|
$$ = new RotateNode($2->getNumber(), $4->getVector());
|
||||||
}
|
}
|
||||||
| SCALE vector {
|
| SCALE vector3 {
|
||||||
$$ = new ScaleNode($2->getVector());
|
$$ = 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());
|
$$ = new TranslateBlockNode($2->getVector());
|
||||||
$$->addChildren($4);
|
$$->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());
|
$$ = new RotateBlockNode($2->getNumber(), $4->getVector());
|
||||||
$$->addChildren($6);
|
$$->addChildren($6);
|
||||||
}
|
}
|
||||||
| SCALE vector LCURLY transform_block_items RCURLY {
|
| SCALE vector3 LCURLY transform_block_items RCURLY {
|
||||||
$$ = new ScaleBlockNode($2->getVector());
|
$$ = new ScaleBlockNode($2->getVector());
|
||||||
$$->addChildren($4);
|
$$->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 */
|
transform_block_items: /* empty */
|
||||||
@ -443,11 +500,16 @@ union: UNION LCURLY bool_items RCURLY {
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
vector: LESS number COMMA number COMMA number GREATER {
|
vector2: LESS number COMMA number GREATER {
|
||||||
refptr<Vector> vec = new Vector();
|
refptr<Vector> vec =
|
||||||
(*vec)[0] = $2->getNumber();
|
new Vector($2->getNumber(), $4->getNumber(), 0.0);
|
||||||
(*vec)[1] = $4->getNumber();
|
$$ = new VectorNode(vec);
|
||||||
(*vec)[2] = $6->getNumber();
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
vector3: LESS number COMMA number COMMA number GREATER {
|
||||||
|
refptr<Vector> vec =
|
||||||
|
new Vector($2->getNumber(), $4->getNumber(), $6->getNumber());
|
||||||
$$ = new VectorNode(vec);
|
$$ = new VectorNode(vec);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user