reads a Wavefront .OBJ file from
(or the standard input) and compiles it into a RADIANCE triangle mesh,
which is sent to
(or standard output).
Any RADIANCE material descriptions included via one or more
options will be compiled and stored in the mesh as well.
option is used to specify a material file, the RADIANCE library
locations are searched.
This mesh may be included in a RADIANCE scene description via the
mod mesh id
1+ output.rtm [xform args]
The syntax and semantics are identical to the RADIANCE
is "void", then the stored mesh materials will be applied during rendering.
Otherwise, the given material will be substituted on
all the mesh surfaces.
option specifies the maximum surface set size for
Larger numbers result in quicker mesh generation,
but potentially slower rendering.
Values below 6 are not recommended, since this is the median
valence for a mesh vertex (the number of adjacent faces),
and smaller values will result in pointless octree subdivision.
The default setting is 9.
option specifies the maximum octree resolution.
This should be greater than or equal to the ratio of the mesh bounding
box to the smallest triangle.
The default is 16384.
option suppresses warnings.
Although the mesh file format is binary, it is meant to be portable
The only limitation is that machines with radically different integer
sizes will not work together.
The following Wavefront statements are understood and compiled by
v x y z
A vertex location, given by its Cartesian coordinates.
The final mesh position may of course be modified by
the transform arguments given to the
primitive in the Radiance scene description.
vn dx dy dz
A vertex normal vector, given by its three
direction components, which will be normalized by
Normals will be interpolated over the mesh
during rendering to produce a smooth surface.
If no vertex normals are present, the mesh will appear tesselated.
A zero length normal (i.e., 0 0 0) will generate a syntax error.
vt u v
A local vertex texture coordinate.
These coordinates will be interpolated and passed
to the "Lu" and "Lv" variables during rendering.
Local coordinates can extend over any desired range of values.
A material name.
The following faces will use the named material, which is
taken from the material definitions in the
The following faces are associated with the named group.
If no "usemtl" statement has been
encountered, the current group is used for the surface material
f v1/t1/n1 v2/t2/n2 v3/t3/n3 ..
A polygonal face.
Polygon vertices are specified as three indices separated
by slashes ('/').
The first index is the vertex location, the
second index is the local (u,v) texture coordinate, and the
third index is the vertex surface normal.
Positive indices count from the beginning of the input,
where the first vertex position (
statement) is numbered 1, and likewise
for the first texture coordinate and the first surface normal.
Negative indices count backward from the current position in
the input, where -1 is the last vertex encountered, -2
is the one before that, etc.
An index of 0 may be used for the vertex texture or normal to
indicate none, or these may be left off entirely.
All faces will be broken into triangles in the final mesh.
currently makes an unsafe assumption that faces are convex,
which may result in odd results if they are not.
All other statement types will be ignored on the input.
Statements understood by
will be ignored silently; other statements will generate
a warning message after translation to indicate how much was missed.
There are four basic error types reported by obj2mesh:
warning - a non-fatal input-related error
fatal - an unrecoverable input-related error
system - a system-related error
internal - a fatal error related to program limitations
consistency - a program-caused error
Most errors are self-explanatory.
However, the following internal errors should be mentioned:
Set overflow in addobject (id)
This error occurs when too many surfaces are close together in a
Sometimes a dense mesh can be accommodated by increasing
the maximum resolution (by powers of two) using the
option, but usually this error indicates something is wrong.
Either too many surfaces are lying right on top of each other,
or the bounding cube is inflated from disparate geometry
in the input.
Chances are, the face number "id" is near
those causing the problem.
Hash table overflow in fullnode
This error is caused by too many surfaces, and there is
little hope of compiling this mesh.
To create a compiled triangle mesh from the scene file mesh.obj
using materials from the file mesh.mat:
obj2mesh -a mesh.mat mesh.obj mesh.rtm
To use local coordinates to place a square tiled image on a mesh object: