Ray Tracer Model File Format
Ray tracer model files are stored ASCII file format:
Light:
light ID <#> {pnt,inf,amb} <x>
<y> <z> <lx> <ly> <lz> <R> <G>
<B> <a0> <a1> <a2> <aa> {shadow_on,shadow_off}
Where:
<#> is the unique light
identification number
<x> <y> <z> is the position
<lx> <ly> <lz> is the direction
<R> <G> <B> is the color in the range [0,1]
<a0> <a1> <a2> are the attenuation coefficients for
distance
<aa> is the angular attenuation exponent
{shadow_on,shadow_off} turn shadows "on" or "off" for that light
Material:
mat ID <#> <R> <G> <B>
<Ka> <Kd> <Ks> <ns> <Kt> <Kr> <Irefract>
Where:
<#> is the unique material identification number
<R> <G> <B> is the color in the range [0,1]
<Ka> <Kd> <Ks> are the coefficients of ambient, diffuse,
and specular reflection
<ns> is the specular-reflection exponent
<Kt> <Kr> <Irefract> are the coefficients of transmission
and reflection, and index of refraction
Surface objects:
obj sphere ID <#> mat ID <mat
#> <x> <y> <z> <radius>
Where:
<#> is the unique object indentifier number
<mat #> is the material assigned to this object
<x> <y> <z> is the center point
<radius> is the radius
obj ellipsoid ID <#> mat ID <mat
#> <x> <y> <z> <rx> <ry> <yz>
Where:
<#> is the unique object indentifier number
<mat #> is the material assigned to this object
<x> <y> <z> is the center point
<xr> <yr> <zr> are the radii
obj cylinder ID <#> mat ID <mat
#> <x> <y> <z> <nx> <ny> <nz> <radius>
<length>
Where:
<#> is the unique object indentifier number
<mat #> is the material assigned to this object
<x> <y> <z> is the center point
<nx> <ny> <nz> is the unit vector in the direction of the
cylinder's long axis
<radius> <length> are the radius and length
obj box ID <#> mat ID <#> <x>
<y> <z> <ux> <uy> <uz> <vx> <vy>
<vz> <wx> <wy> <wz> <u_width> <v_width>
<w_width>
Where:
<#> is the unique object indentifier number
<mat #> is the material assigned to this object
<x> <y> <z> is the center point
<ux> <uy> <uz> <vx> <vy> <vz> <wx>
<wy> <wz> are three unit vectors defining the box orientation
<u_width> <v_width><w_width> are the box widths along the
respective dimensions
CSG object:
obj CSG ID <#> {union,intersect,difference}
ID <ID1#> ID <ID2#>
Where:
Two previously defined objects are combined via a CSG operation. The
objects can be spheres, ellipsoids, boxes, cylinders, or other CSG objects.
Camera specification:
viewport <width> <height>
Where:
<width> is the window width in pixels
<height> is the window height in pixels
resolution <x_res> <y_res>
Where:
<x_res> is the width of a pixel in world units
<y_res> is the height of a pixel in world units
camera {perspective,orthographic} <cop_x>
<cop_y> <cop_z> <look_x> <look_y> <look_z>
<up_x> <up_y> <up_z> <focal_length> <near_clip_plane_dist>
<far_clip_plane_dist>
Where:
{perspective,orthographic} is the camera type: "perspective" or "orthographic"
<cop_x> <cop_y> <cop_z> is the camera center
<look_x> <look_y> <look_z> is the "look at" point
<up_x> <up_y> <up_z> is the up vector
<focal_length> is the focal length (ignored for "orthographic")
<near_clip_plane_dist> <far_clip_plane_dist> are the near
and far clip plane distances
Render control:
render N ID <#> ... ID <#>
Where:
when N = 0 all objects are rendered, or when N > 0 then a list of
N object ID numbers to be rendered is given