| file | ::= | camera background lights materials group |
| camera | ::= | orthographicCamera | perspectiveCamera |
| orthographicCamera | ::= |
OrthographicCamera { center Vec3f direction Vec3f up Vec3f size float } |
| perspectiveCamera | ::= |
PerspectiveCamera { center Vec3f direction Vec3f up Vec3f angle float } |
| background | ::= |
Background { color Vec3f ambientLight Vec3f } |
| lights | ::= |
Lights { numLights int light ^ numLights } |
| light | ::= | directionalLight |
| directionalLight | ::= |
DirectionalLight { direction Vec3f color Vec3f } |
| materials | ::= |
Materials { numMaterials int Material ^ numMaterials } |
| Material | ::= |
Material { diffuseColor Vec3f } |
| group | ::= |
Group { numObjects int (object3D | material object3D) ^ numObjects } |
| object3D | ::= | group | transform | sphere | plane | triangle | triangleMesh |
| transform | ::= |
Transform { transformation* object3D } |
| transformation | ::= |
Translate Vec3f | Scale Vec3f | XRotate float | YRotate float | ZRotate float | Rotate { Vec3f float } | Matrix { float ^ 16 } |
| sphere | ::= |
Sphere { center Vec3f radius float } |
| plane | ::= |
Plane { normal Vec3f offset float } |
| triangle | ::= |
Triangle { vertex0 Vec3f vertex1 Vec3f vertex2 Vec3f } |
| triangleMesh | ::= |
TriangleMesh { obj_file string } |
| material | ::= |
Material { diffuse_color Vec3f } |
| Vec3f | ::= | float float float |
| | | means "OR" |
| ^ n | means "exactly n elements" |
| * | means "zero or more elements" |