From 5de38abbd755b060f818f683f4903bf317ee82df Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Fri, 14 Jun 2019 03:14:01 -0400 Subject: More file format docs. --- doc/cs-notes.txt | 28 ++ doc/mtl-format.txt | 1404 ++++++++++++++++++++++++++++++++++++++++++++++++++++ doc/obj-spec.txt | 292 +++++++++++ 3 files changed, 1724 insertions(+) create mode 100644 doc/cs-notes.txt create mode 100644 doc/mtl-format.txt create mode 100644 doc/obj-spec.txt diff --git a/doc/cs-notes.txt b/doc/cs-notes.txt new file mode 100644 index 0000000..8ccd536 --- /dev/null +++ b/doc/cs-notes.txt @@ -0,0 +1,28 @@ +cstypes + +bezier + +Type bezier specifies a sequence of Bezier curves of similar degree, each +beginning where the prior terminated. If there are multiple curves in the +sequence, then the initial control point of a latter curve is not explicitly +specified since it is equal to the last control point of the prior curve. + +Consider the following example. + + curv2 -6 -5 -4 -3 -2 -1 -6 + +When the degree is 3, the above specifies two Bézier curves: C₁=(-6,-5,-4,-3) and +C₂=(-3,-2,-1,-6). + +The Bézier curve functions are taken to be branches of a peicewise function C +obtianed by dividing the parameter space into regions and mapping each region +to a different curve. For example, + + parm u 0.00 1.00 2.00 + +specifies two intervals, [0,1] and [1,2]. If the parameter is between 0 and 1, +it will be mapped via the first curve C₁ and if it is between 1 and 2, it will +be mapped via the second curve C₂. In order to maintain continuity, an affine +transformation will be applied first to obtain a value between 0 and 1 so that +C(1.5) = C₂(0.5). + diff --git a/doc/mtl-format.txt b/doc/mtl-format.txt new file mode 100644 index 0000000..ebeab6e --- /dev/null +++ b/doc/mtl-format.txt @@ -0,0 +1,1404 @@ + MTL material format (Lightwave, OBJ) + + Excerpt from FILE FORMATS, Version 4.2 + October 1995 + Documentation created by: Diane Ramey, Linda Rose, and Lisa Tyerman + Copyright 1995 Alias|Wavefront, Inc. + All rights reserved + + + +5. Material Library File (.mtl) + + Material library files contain one or more material definitions, each +of which includes the color, texture, and reflection map of individual +materials. These are applied to the surfaces and vertices of objects. +Material files are stored in ASCII format and have the .mtl extension. + + An .mtl file differs from other Alias|Wavefront property files, such as +light and atmosphere files, in that it can contain more than one +material definition (other files contain the definition of only one +item). + + An .mtl file is typically organized as shown below. + + + newmtl my_red + Material color + & illumination + statements + + texture map + statements + + reflection map + statement + + newmtl my_blue + Material color + & illumination + statements + + texture map + statements + + reflection map + statement + + newmtl my_green + Material color + & illumination + statements + + texture map + statements + + reflection map + statement + + Figure 5-1. Typical organization of .mtl file + + + Each material description in an .mtl file consists of the newmtl +statement, which assigns a name to the material and designates the start +of a material description. This statement is followed by the material +color, texture map, and reflection map statements that describe the +material. An .mtl file map contain many different material +descriptions. + + After you specify a new material with the "newmtl" statement, you can +enter the statements that describe the materials in any order. However, +when the Property Editor writes an .mtl file, it puts the statements in +a system-assigned order. In this chapter, the statements are described +in the system-assigned order. + + + Format + + The following is a sample format for a material definition in an .mtl +file: + + Material + name + statement: + newmtl my_mtl + + Material + color and + illumination + statements: + Ka 0.0435 0.0435 0.0435 + Kd 0.1086 0.1086 0.1086 + Ks 0.0000 0.0000 0.0000 + Tf 0.9885 0.9885 0.9885 + illum 6 + d -halo 0.6600 + Ns 10.0000 + sharpness 60 + Ni 1.19713 + + Texture + map + statements: + map_Ka -s 1 1 1 -o 0 0 0 -mm 0 1 chrome.mpc + map_Kd -s 1 1 1 -o 0 0 0 -mm 0 1 chrome.mpc + map_Ks -s 1 1 1 -o 0 0 0 -mm 0 1 chrome.mpc + map_Ns -s 1 1 1 -o 0 0 0 -mm 0 1 wisp.mps + map_d -s 1 1 1 -o 0 0 0 -mm 0 1 wisp.mps + disp -s 1 1 .5 wisp.mps + decal -s 1 1 1 -o 0 0 0 -mm 0 1 sand.mps + bump -s 1 1 1 -o 0 0 0 -bm 1 sand.mpb + + Reflection + map + statement: + refl -type sphere -mm 0 1 clouds.mpc + + + Material Name + + The material name statement assigns a name to the material description. + + Syntax + The folowing syntax describes the material name statement. + + newmtl name + + Specifies the start of a material description and assigns a name to the +material. An .mtl file must have one newmtl statement at the start of +each material description. + + "name" is the name of the material. Names may be any length but +cannot include blanks. Underscores may be used in material names. + + + Material color and illumination + + The statements in this section specify color, transparency, and +reflectivity values. + + Syntax + The following syntax describes the material color and illumination +statements that apply to all .mtl files. + + + Ka r g b + Ka spectral file.rfl factor + Ka xyz x y z + + To specify the ambient reflectivity of the current material, you can +use the "Ka" statement, the "Ka spectral" statement, or the "Ka xyz" +statement. + + Tip These statements are mutually exclusive. They cannot be used +concurrently in the same material. + + Ka r g b + + The Ka statement specifies the ambient reflectivity using RGB values. + + "r g b" are the values for the red, green, and blue components of the +color. The g and b arguments are optional. If only r is specified, +then g, and b are assumed to be equal to r. The r g b values are +normally in the range of 0.0 to 1.0. Values outside this range increase +or decrease the relectivity accordingly. + + Ka spectral file.rfl factor + + The "Ka spectral" statement specifies the ambient reflectivity using a +spectral curve. + + "file.rfl" is the name of the .rfl file. + "factor" is an optional argument. + "factor" is a multiplier for the values in the .rfl file and defaults +to 1.0, if not specified. + + Ka xyz x y z + + The "Ka xyz" statement specifies the ambient reflectivity using CIEXYZ +values. + + "x y z" are the values of the CIEXYZ color space. The y and z +arguments are optional. If only x is specified, then y and z are +assumed to be equal to x. The x y z values are normally in the range of +0 to 1. Values outside this range increase or decrease the reflectivity +accordingly. + + + Kd r g b + Kd spectral file.rfl factor + Kd xyz x y z + + To specify the diffuse reflectivity of the current material, you can +use the "Kd" statement, the "Kd spectral" statement, or the "Kd xyz" +statement. + + Tip These statements are mutually exclusive. They cannot be used +concurrently in the same material. + + Kd r g b + + The Kd statement specifies the diffuse reflectivity using RGB values. + + "r g b" are the values for the red, green, and blue components of the +atmosphere. The g and b arguments are optional. If only r is +specified, then g, and b are assumed to be equal to r. The r g b values +are normally in the range of 0.0 to 1.0. Values outside this range +increase or decrease the relectivity accordingly. + + Kd spectral file.rfl factor + + The "Kd spectral" statement specifies the diffuse reflectivity using a +spectral curve. + + "file.rfl" is the name of the .rfl file. + "factor" is an optional argument. + "factor" is a multiplier for the values in the .rfl file and defaults +to 1.0, if not specified. + + Kd xyz x y z + + The "Kd xyz" statement specifies the diffuse reflectivity using CIEXYZ +values. + + "x y z" are the values of the CIEXYZ color space. The y and z +arguments are optional. If only x is specified, then y and z are +assumed to be equal to x. The x y z values are normally in the range of +0 to 1. Values outside this range increase or decrease the reflectivity +accordingly. + + + Ks r g b + Ks spectral file.rfl factor + Ks xyz x y z + + To specify the specular reflectivity of the current material, you can +use the "Ks" statement, the "Ks spectral" statement, or the "Ks xyz" +statement. + + Tip These statements are mutually exclusive. They cannot be used +concurrently in the same material. + + Ks r g b + + The Ks statement specifies the specular reflectivity using RGB values. + + "r g b" are the values for the red, green, and blue components of the +atmosphere. The g and b arguments are optional. If only r is +specified, then g, and b are assumed to be equal to r. The r g b values +are normally in the range of 0.0 to 1.0. Values outside this range +increase or decrease the relectivity accordingly. + + Ks spectral file.rfl factor + + The "Ks spectral" statement specifies the specular reflectivity using a +spectral curve. + + "file.rfl" is the name of the .rfl file. + "factor" is an optional argument. + "factor" is a multiplier for the values in the .rfl file and defaults +to 1.0, if not specified. + + Ks xyz x y z + + The "Ks xyz" statement specifies the specular reflectivity using CIEXYZ +values. + + "x y z" are the values of the CIEXYZ color space. The y and z +arguments are optional. If only x is specified, then y and z are +assumed to be equal to x. The x y z values are normally in the range of +0 to 1. Values outside this range increase or decrease the reflectivity +accordingly. + + + Tf r g b + Tf spectral file.rfl factor + Tf xyz x y z + + To specify the transmission filter of the current material, you can use +the "Tf" statement, the "Tf spectral" statement, or the "Tf xyz" +statement. + + Any light passing through the object is filtered by the transmission +filter, which only allows the specifiec colors to pass through. For +example, Tf 0 1 0 allows all the green to pass through and filters out +all the red and blue. + + Tip These statements are mutually exclusive. They cannot be used +concurrently in the same material. + + Tf r g b + + The Tf statement specifies the transmission filter using RGB values. + + "r g b" are the values for the red, green, and blue components of the +atmosphere. The g and b arguments are optional. If only r is +specified, then g, and b are assumed to be equal to r. The r g b values +are normally in the range of 0.0 to 1.0. Values outside this range +increase or decrease the relectivity accordingly. + + Tf spectral file.rfl factor + + The "Tf spectral" statement specifies the transmission filterusing a +spectral curve. + + "file.rfl" is the name of the .rfl file. + "factor" is an optional argument. + "factor" is a multiplier for the values in the .rfl file and defaults +to 1.0, if not specified. + + Tf xyz x y z + + The "Ks xyz" statement specifies the specular reflectivity using CIEXYZ +values. + + "x y z" are the values of the CIEXYZ color space. The y and z +arguments are optional. If only x is specified, then y and z are +assumed to be equal to x. The x y z values are normally in the range of +0 to 1. Values outside this range will increase or decrease the +intensity of the light transmission accordingly. + + + illum illum_# + + The "illum" statement specifies the illumination model to use in the +material. Illumination models are mathematical equations that represent +various material lighting and shading effects. + + "illum_#"can be a number from 0 to 10. The illumination models are +summarized below; for complete descriptions see "Illumination models" on +page 5-30. + + Illumination Properties that are turned on in the + model Property Editor + + 0 Color on and Ambient off + 1 Color on and Ambient on + 2 Highlight on + 3 Reflection on and Ray trace on + 4 Transparency: Glass on + Reflection: Ray trace on + 5 Reflection: Fresnel on and Ray trace on + 6 Transparency: Refraction on + Reflection: Fresnel off and Ray trace on + 7 Transparency: Refraction on + Reflection: Fresnel on and Ray trace on + 8 Reflection on and Ray trace off + 9 Transparency: Glass on + Reflection: Ray trace off + 10 Casts shadows onto invisible surfaces + + + d factor + + Specifies the dissolve for the current material. + + "factor" is the amount this material dissolves into the background. A +factor of 1.0 is fully opaque. This is the default when a new material +is created. A factor of 0.0 is fully dissolved (completely +transparent). + + Unlike a real transparent material, the dissolve does not depend upon +material thickness nor does it have any spectral character. Dissolve +works on all illumination models. + + d -halo factor + + Specifies that a dissolve is dependent on the surface orientation +relative to the viewer. For example, a sphere with the following +dissolve, d -halo 0.0, will be fully dissolved at its center and will +appear gradually more opaque toward its edge. + + "factor" is the minimum amount of dissolve applied to the material. +The amount of dissolve will vary between 1.0 (fully opaque) and the +specified "factor". The formula is: + + dissolve = 1.0 - (N*v)(1.0-factor) + + For a definition of terms, see "Illumination models" on page 5-30. + + + Ns exponent + + Specifies the specular exponent for the current material. This defines +the focus of the specular highlight. + + "exponent" is the value for the specular exponent. A high exponent +results in a tight, concentrated highlight. Ns values normally range +from 0 to 1000. + + + sharpness value + + Specifies the sharpness of the reflections from the local reflection +map. If a material does not have a local reflection map defined in its +material definition, sharpness will apply to the global reflection map +defined in PreView. + + "value" can be a number from 0 to 1000. The default is 60. A high +value results in a clear reflection of objects in the reflection map. + + Tip Sharpness values greater than 100 map introduce aliasing effects +in flat surfaces that are viewed at a sharp angle + + + Ni optical_density + + Specifies the optical density for the surface. This is also known as +index of refraction. + + "optical_density" is the value for the optical density. The values can +range from 0.001 to 10. A value of 1.0 means that light does not bend +as it passes through an object. Increasing the optical_density +increases the amount of bending. Glass has an index of refraction of +about 1.5. Values of less than 1.0 produce bizarre results and are not +recommended. + + + Material texture map + + Texture map statements modify the material parameters of a surface by +associating an image or texture file with material parameters that can +be mapped. By modifying existing parameters instead of replacing them, +texture maps provide great flexibility in changing the appearance of an +object's surface. + + Image files and texture files can be used interchangeably. If you use +an image file, that file is converted to a texture in memory and is +discarded after rendering. + + Tip Using images instead of textures saves disk space and setup time, +however, it introduces a small computational cost at the beginning of a +render. + + The material parameters that can be modified by a texture map are: + + - Ka (color) + - Kd (color) + - Ks (color) + - Ns (scalar) + - d (scalar) + + In addition to the material parameters, the surface normal can be +modified. + + + Image file types + + You can link any image file type that is currently supported. +Supported image file types are listed in the chapter "About Image" in +the "Advanced Visualizer User's Guide". You can also use the "im_info - +a" command to list Image file types, among other things. + + + Texture file types + + The texture file types you can use are: + + - mip-mapped texture files (.mpc, .mps, .mpb) + - compiled procedural texture files (.cxc, .cxs, .cxb) + + + Mip-mapped texture files + + Mip-mapped texture files are created from images using the Create +Textures panel in the Director or the "texture2D" program. There are +three types of texture files: + + - color texture files (.mpc) + - scalar texture files (.mps) + - bump texture files (.mpb) + + Color textures. Color texture files are designated by an extension of +".mpc" in the filename, such as "chrome.mpc". Color textures modify the +material color as follows: + + - Ka - material ambient is multiplied by the texture value + - Kd - material diffuse is multiplied by the texture value + - Ks - material specular is multiplied by the texture value + + Scalar textures. Scalar texture files are designated by an extension +of ".mps" in the filename, such as "wisp.mps". Scalar textures modify +the material scalar values as follows: + + - Ns - material specular exponent is multiplied by the texture value + - d - material dissolve is multiplied by the texture value + - decal - uses a scalar value to deform the surface of an object to +create surface roughness + + Bump textures. Bump texture files are designated by an extension of +".mpb" in the filename, such as "sand.mpb". Bump textures modify +surface normals. The image used for a bump texture represents the +topology or height of the surface relative to the average surface. Dark +areas are depressions and light areas are high points. The effect is +like embossing the surface with the texture. + + + Procedural texture files + + Procedural texture files use mathematical formulas to calculate sample +values of the texture. The procedural texture file is compiled, stored, +and accessed by the Image program when rendering. for more information +see chapter 9, "Procedural Texture Files (.cxc, .cxb. and .cxs)". + + Syntax + + The following syntax describes the texture map statements that apply to +.mtl files. These statements can be used alone or with any combination +of options. The options and their arguments are inserted between the +keyword and the "filename". + + map_Ka -options args filename + + Specifies that a color texture file or a color procedural texture file +is applied to the ambient reflectivity of the material. During +rendering, the "map_Ka" value is multiplied by the "Ka" value. + + "filename" is the name of a color texture file (.mpc), a color +procedural texture file (.cxc), or an image file. + + Tip To make sure that the texture retains its original look, use the +.rfl file "ident" as the underlying material. This applies to the +"map_Ka", "map_Kd", and "map_Ks" statements. For more information on +.rfl files, see chapter 8, "Spectral Curve File (.rfl)". + + The options for the "map_Ka" statement are listed below. These options +are described in detail in "Options for texture map statements" on page +5-18. + + -blendu on | off + -blendv on | off + -cc on | off + -clamp on | off + -mm base gain + -o u v w + -s u v w + -t u v w + -texres value + + + map_Kd -options args filename + + Specifies that a color texture file or color procedural texture file is +linked to the diffuse reflectivity of the material. During rendering, +the map_Kd value is multiplied by the Kd value. + + "filename" is the name of a color texture file (.mpc), a color +procedural texture file (.cxc), or an image file. + + The options for the map_Kd statement are listed below. These options +are described in detail in "Options for texture map statements" on page +5-18. + + -blendu on | off + -blendv on | off + -cc on | off + -clamp on | off + -mm base gain + -o u v w + -s u v w + -t u v w + -texres value + + + map_Ks -options args filename + + Specifies that a color texture file or color procedural texture file is +linked to the specular reflectivity of the material. During rendering, +the map_Ks value is multiplied by the Ks value. + + "filename" is the name of a color texture file (.mpc), a color +procedural texture file (.cxc), or an image file. + + The options for the map_Ks statement are listed below. These options +are described in detail in "Options for texture map statements" on page +5-18. + + -blendu on | off + -blendv on | off + -cc on | off + -clamp on | off + -mm base gain + -o u v w + -s u v w + -t u v w + -texres value + + + map_Ns -options args filename + + Specifies that a scalar texture file or scalar procedural texture file +is linked to the specular exponent of the material. During rendering, +the map_Ns value is multiplied by the Ns value. + + "filename" is the name of a scalar texture file (.mps), a scalar +procedural texture file (.cxs), or an image file. + + The options for the map_Ns statement are listed below. These options +are described in detail in "Options for texture map statements" on page +5-18. + + -blendu on | off + -blendv on | off + -clamp on | off + -imfchan r | g | b | m | l | z + -mm base gain + -o u v w + -s u v w + -t u v w + -texres value + + + map_d -options args filename + + Specifies that a scalar texture file or scalar procedural texture file +is linked to the dissolve of the material. During rendering, the map_d +value is multiplied by the d value. + + "filename" is the name of a scalar texture file (.mps), a scalar +procedural texture file (.cxs), or an image file. + + The options for the map_d statement are listed below. These options +are described in detail in "Options for texture map statements" on page +5-18. + + -blendu on | off + -blendv on | off + -clamp on | off + -imfchan r | g | b | m | l | z + -mm base gain + -o u v w + -s u v w + -t u v w + -texres value + + + map_aat on + + Turns on anti-aliasing of textures in this material without anti- +aliasing all textures in the scene. + + If you wish to selectively anti-alias textures, first insert this +statement in the material file. Then, when rendering with the Image +panel, choose the anti-alias settings: "shadows", "reflections +polygons", or "polygons only". If using Image from the command line, +use the -aa or -os options. Do not use the -aat option. + + Image will anti-alias all textures in materials with the map_aat on +statement, using the oversampling level you choose when you run Image. +Textures in other materials will not be oversampled. + + You cannot set a different oversampling level individually for each +material, nor can you anti-alias some textures in a material and not +others. To anti-alias all textures in all materials, use the -aat +option from the Image command line. If a material with "map_aat on" +includes a reflection map, all textures in that reflection map will be +anti-aliased as well. + + You will not see the effects of map_aat in the Property Editor. + + Tip Some .mpc textures map exhibit undesirable effects around the +edges of smoothed objects. The "map_aat" statement will correct this. + + + decal -options args filename + + Specifies that a scalar texture file or a scalar procedural texture +file is used to selectively replace the material color with the texture +color. + + "filename" is the name of a scalar texture file (.mps), a scalar +procedural texture file (.cxs), or an image file. + + During rendering, the Ka, Kd, and Ks values and the map_Ka, map_Kd, and +map_Ks values are blended according to the following formula: + + result_color=tex_color(tv)*decal(tv)+mtl_color*(1.0-decal(tv)) + + where tv is the texture vertex. + + "result_color" is the blended Ka, Kd, and Ks values. + + The options for the decal statement are listed below. These options +are described in detail in "Options for texture map statements" on page +5-18. + + -blendu on | off + -blendv on | off + -clamp on | off + -imfchan r | g | b | m | l | z + -mm base gain + -o u v w + -s u v w + -t u v w + -texres value + + + disp -options args filename + + Specifies that a scalar texture is used to deform the surface of an +object, creating surface roughness. + + "filename" is the name of a scalar texture file (.mps), a bump +procedural texture file (.cxb), or an image file. + + The options for the disp statement are listed below. These options are +described in detail in "Options for texture map statements" on page 5- +18. + + -blendu on | off + -blendv on | off + -clamp on | off + -imfchan r | g | b | m | l | z + -mm base gain + -o u v w + -s u v w + -t u v w + -texres value + + + bump -options args filename + + Specifies that a bump texture file or a bump procedural texture file is +linked to the material. + + "filename" is the name of a bump texture file (.mpb), a bump procedural +texture file (.cxb), or an image file. + + The options for the bump statement are listed below. These options are +described in detail in "Options for texture map statements" on page 5- +18. + + -bm mult + -clamp on | off + -blendu on | off + -blendv on | off + -imfchan r | g | b | m | l | z + -mm base gain + -o u v w + -s u v w + -t u v w + -texres value + + + Options for texture map statements + + The following options and arguments can be used to modify the texture +map statements. + + -blenu on | off + + The -blendu option turns texture blending in the horizontal direction +(u direction) on or off. The default is on. + + -blenv on | off + + The -blendv option turns texture blending in the vertical direction (v +direction) on or off. The default is on. + + -bm mult + + The -bm option specifies a bump multiplier. You can use it only with +the "bump" statement. Values stored with the texture or procedural +texture file are multiplied by this value before they are applied to the +surface. + + "mult" is the value for the bump multiplier. It can be positive or +negative. Extreme bump multipliers may cause odd visual results because +only the surface normal is perturbed and the surface position does not +change. For best results, use values between 0 and 1. + + -boost value + + The -boost option increases the sharpness, or clarity, of mip-mapped +texture files -- that is, color (.mpc), scalar (.mps), and bump (.mpb) +files. If you render animations with boost, you may experience some +texture crawling. The effects of boost are seen when you render in +Image or test render in Model or PreView; they aren't as noticeable in +Property Editor. + + "value" is any non-negative floating point value representing the +degree of increased clarity; the greater the value, the greater the +clarity. You should start with a boost value of no more than 1 or 2 and +increase the value as needed. Note that larger values have more +potential to introduce texture crawling when animated. + + -cc on | off + + The -cc option turns on color correction for the texture. You can use +it only with the color map statements: map_Ka, map_Kd, and map_Ks. + + -clamp on | off + + The -clamp option turns clamping on or off. When clamping is on, +textures are restricted to 0-1 in the uvw range. The default is off. + + When clamping is turned on, one copy of the texture is mapped onto the +surface, rather than repeating copies of the original texture across the +surface of a polygon, which is the default. Outside of the origin +texture, the underlying material is unchanged. + + A postage stamp on an envelope or a label on a can of soup is an +example of a texture with clamping turned on. A tile floor or a +sidewalk is an example of a texture with clamping turned off. + + Two-dimensional textures are clamped in the u and v dimensions; 3D +procedural textures are clamped in the u, v, and w dimensions. + + -imfchan r | g | b | m | l | z + + The -imfchan option specifies the channel used to create a scalar or +bump texture. Scalar textures are applied to: + + transparency + specular exponent + decal + displacement + + The channel choices are: + + r specifies the red channel. + g specifies the green channel. + b specifies the blue channel. + m specifies the matte channel. + l specifies the luminance channel. + z specifies the z-depth channel. + + The default for bump and scalar textures is "l" (luminance), unless you +are building a decal. In that case, the default is "m" (matte). + + -mm base gain + + The -mm option modifies the range over which scalar or color texture +values may vary. This has an effect only during rendering and does not +change the file. + + "base" adds a base value to the texture values. A positive value makes +everything brighter; a negative value makes everything dimmer. The +default is 0; the range is unlimited. + + "gain" expands the range of the texture values. Increasing the number +increases the contrast. The default is 1; the range is unlimited. + + -o u v w + + The -o option offsets the position of the texture map on the surface by +shifting the position of the map origin. The default is 0, 0, 0. + + "u" is the value for the horizontal direction of the texture + + "v" is an optional argument. + "v" is the value for the vertical direction of the texture. + + "w" is an optional argument. + "w" is the value used for the depth of a 3D texture. + + -s u v w + + The -s option scales the size of the texture pattern on the textured +surface by expanding or shrinking the pattern. The default is 1, 1, 1. + + "u" is the value for the horizontal direction of the texture + + "v" is an optional argument. + "v" is the value for the vertical direction of the texture. + + "w" is an optional argument. + "w" is a value used for the depth of a 3D texture. + "w" is a value used for the amount of tessellation of the displacement +map. + + -t u v w + + The -t option turns on turbulence for textures. Adding turbulence to a +texture along a specified direction adds variance to the original image +and allows a simple image to be repeated over a larger area without +noticeable tiling effects. + + turbulence also lets you use a 2D image as if it were a solid texture, +similar to 3D procedural textures like marble and granite. + + "u" is the value for the horizontal direction of the texture +turbulence. + + "v" is an optional argument. + "v" is the value for the vertical direction of the texture turbulence. + + "w" is an optional argument. + "w" is a value used for the depth of the texture turbulence. + + By default, the turbulence for every texture map used in a material is +uvw = (0,0,0). This means that no turbulence will be applied and the 2D +texture will behave normally. + + Only when you raise the turbulence values above zero will you see the +effects of turbulence. + + -texres resolution + + The -texres option specifies the resolution of texture created when an +image is used. The default texture size is the largest power of two +that does not exceed the original image size. + + If the source image is an exact power of 2, the texture cannot be built +any larger. If the source image size is not an exact power of 2, you +can specify that the texture be built at the next power of 2 greater +than the source image size. + + The original image should be square, otherwise, it will be scaled to +fit the closest square size that is not larger than the original. +Scaling reduces sharpness. + + + Material reflection map + + A reflection map is an environment that simulates reflections in +specified objects. The environment is represented by a color texture +file or procedural texture file that is mapped on the inside of an +infinitely large, space. Reflection maps can be spherical or cubic. A +spherical reflection map requires only one texture or image file, while +a cubic reflection map requires six. + + Each material description can contain one reflection map statement that +specifies a color texture file or a color procedural texture file to +represent the environment. The material itself must be assigned an +illumination model of 3 or greater. + + The reflection map statement in the .mtl file defines a local +reflection map. That is, each material assigned to an object in a scene +can have an individual reflection map. In PreView, you can assign a +global reflection map to an object and specify the orientation of the +reflection map. Rotating the reflection map creates the effect of +animating reflections independently of object motion. When you replace +a global reflection map with a local reflection map, the local +reflection map inherits the transformation of the global reflection map. + + Syntax + + The following syntax statements describe the reflection map statement +for .mtl files. + + refl -type sphere -options -args filename + + Specifies an infinitely large sphere that casts reflections onto the +material. You specify one texture file. + + "filename" is the color texture file, color procedural texture file, or +image file that will be mapped onto the inside of the shape. + + refl -type cube_side -options -args filenames + + Specifies an infinitely large sphere that casts reflections onto the +material. You can specify different texture files for the "top", +"bottom", "front", "back", "left", and "right" with the following +statements: + + refl -type cube_top + refl -type cube_bottom + refl -type cube_front + refl -type cube_back + refl -type cube_left + refl -type cube_right + + "filenames" are the color texture files, color procedural texture +files, or image files that will be mapped onto the inside of the shape. + + The "refl" statements for sphere and cube can be used alone or with + any combination of the following options. The options and their +arguments are inserted between "refl" and "filename". + + -blendu on | off + -blendv on | off + -cc on | off + -clamp on | off + -mm base gain + -o u v w + -s u v w + -t u v w + -texres value + + The options for the reflection map statement are described in detail in +"Options for texture map statements" on page 18. + + + Examples + + 1 Neon green + + This is a bright green material. When applied to an object, it will +remain bright green regardless of any lighting in the scene. + + newmtl neon_green + Kd 0.0000 1.0000 0.0000 + illum 0 + + 2 Flat green + + This is a flat green material. + + newmtl flat_green + Ka 0.0000 1.0000 0.0000 + Kd 0.0000 1.0000 0.0000 + illum 1 + + 3 Dissolved green + + This is a flat green, partially dissolved material. + + newmtl diss_green + Ka 0.0000 1.0000 0.0000 + Kd 0.0000 1.0000 0.0000 + d 0.8000 + illum 1 + + 4 Shiny green + + This is a shiny green material. When applied to an object, it shows a +white specular highlight. + + newmtl shiny_green + Ka 0.0000 1.0000 0.0000 + Kd 0.0000 1.0000 0.0000 + Ks 1.0000 1.0000 1.0000 + Ns 200.0000 + illum 1 + + 5 Green mirror + + This is a reflective green material. When applied to an object, it +reflects other objects in the same scene. + + newmtl green_mirror + Ka 0.0000 1.0000 0.0000 + Kd 0.0000 1.0000 0.0000 + Ks 0.0000 1.0000 0.0000 + Ns 200.0000 + illum 3 + + 6 Fake windshield + + This material approximates a glass surface. Is it almost completely +transparent, but it shows reflections of other objects in the scene. It +will not distort the image of objects seen through the material. + + newmtl fake_windsh + Ka 0.0000 0.0000 0.0000 + Kd 0.0000 0.0000 0.0000 + Ks 0.9000 0.9000 0.9000 + d 0.1000 + Ns 200 + illum 4 + + 7 Fresnel blue + + This material exhibits an effect known as Fresnel reflection. When +applied to an object, white fringes may appear where the object's +surface is viewed at a glancing angle. + + newmtl fresnel_blu + Ka 0.0000 0.0000 0.0000 + Kd 0.0000 0.0000 0.0000 + Ks 0.6180 0.8760 0.1430 + Ns 200 + illum 5 + + 8 Real windshield + + This material accurately represents a glass surface. It filters of +colorizes objects that are seen through it. Filtering is done according +to the transmission color of the material. The material also distorts +the image of objects according to its optical density. Note that the +material is not dissolved and that its ambient, diffuse, and specular +reflective colors have been set to black. Only the transmission color +is non-black. + + newmtl real_windsh + Ka 0.0000 0.0000 0.0000 + Kd 0.0000 0.0000 0.0000 + Ks 0.0000 0.0000 0.0000 + Tf 1.0000 1.0000 1.0000 + Ns 200 + Ni 1.2000 + illum 6 + + 9 Fresnel windshield + + This material combines the effects in examples 7 and 8. + + newmtl fresnel_win + Ka 0.0000 0.0000 1.0000 + Kd 0.0000 0.0000 1.0000 + Ks 0.6180 0.8760 0.1430 + Tf 1.0000 1.0000 1.0000 + Ns 200 + Ni 1.2000 + illum 7 + + 10 Tin + + This material is based on spectral reflectance samples taken from an +actual piece of tin. These samples are stored in a separate .rfl file +that is referred to by name in the material. Spectral sample files +(.rfl) can be used in any type of material as an alternative to RGB +values. + + newmtl tin + Ka spectral tin.rfl + Kd spectral tin.rfl + Ks spectral tin.rfl + Ns 200 + illum 3 + + 11 Pine Wood + + This material includes a texture map of a pine pattern. The material +color is set to "ident" to preserve the texture's true color. When +applied to an object, this texture map will affect only the ambient and +diffuse regions of that object's surface. + + The color information for the texture is stored in a separate .mpc file +that is referred to in the material by its name, "pine.mpc". If you use +different .mpc files for ambient and diffuse, you will get unrealistic +results. + + newmtl pine_wood + Ka spectral ident.rfl 1 + Kd spectral ident.rfl 1 + illum 1 + map_Ka pine.mpc + map_Kd pine.mpc + + 12 Bumpy leather + + This material includes a texture map of a leather pattern. The +material color is set to "ident" to preserve the texture's true color. +When applied to an object, it affects both the color of the object's +surface and its apparent bumpiness. + + The color information for the texture is stored in a separate .mpc file +that is referred to in the material by its name, "brown.mpc". The bump +information is stored in a separate .mpb file that is referred to in the +material by its name, "leath.mpb". The -bm option is used to raise the +apparent height of the leather bumps. + + newmtl bumpy_leath + Ka spectral ident.rfl 1 + Kd spectral ident.rfl 1 + Ks spectral ident.rfl 1 + illum 2 + map_Ka brown.mpc + map_Kd brown.mpc + map_Ks brown.mpc + bump -bm 2.000 leath.mpb + + 13 Frosted window + + This material includes a texture map used to alter the opacity of an +object's surface. The material color is set to "ident" to preserve the +texture's true color. When applied to an object, the object becomes +transparent in certain areas and opaque in others. + + The variation between opaque and transparent regions is controlled by +scalar information stored in a separate .mps file that is referred to in +the material by its name, "window.mps". The "-mm" option is used to +shift and compress the range of opacity. + + newmtl frost_wind + Ka 0.2 0.2 0.2 + Kd 0.6 0.6 0.6 + Ks 0.1 0.1 0.1 + d 1 + Ns 200 + illum 2 + map_d -mm 0.200 0.800 window.mps + + 14 Shifted logo + + This material includes a texture map which illustrates how a texture's +origin may be shifted left/right (the "u" direction) or up/down (the "v" +direction). The material color is set to "ident" to preserve the +texture's true color. + + In this example, the original image of the logo is off-center to the +left. To compensate, the texture's origin is shifted back to the right +(the positive "u" direction) using the "-o" option to modify the origin. + + Ka spectral ident.rfl 1 + Kd spectral ident.rfl 1 + Ks spectral ident.rfl 1 + illum 2 + map_Ka -o 0.200 0.000 0.000 logo.mpc + map_Kd -o 0.200 0.000 0.000 logo.mpc + map_Ks -o 0.200 0.000 0.000 logo.mpc + + 15 Scaled logo + + This material includes a texture map showing how a texture may be +scaled left or right (in the "u" direction) or up and down (in the "v" +direction). The material color is set to "ident" to preserve the +texture's true color. + + In this example, the original image of the logo is too small. To +compensate, the texture is scaled slightly to the right (in the positive +"u" direction) and up (in the positive "v" direction) using the "-s" +option to modify the scale. + + Ka spectral ident.rfl 1 + Kd spectral ident.rfl 1 + Ks spectral ident.rfl 1 + illum 2 + map_Ka -s 1.200 1.200 0.000 logo.mpc + map_Kd -s 1.200 1.200 0.000 logo.mpc + map_Ks -s 1.200 1.200 0.000 logo.mpc + + 16 Chrome with spherical reflection map + + This illustrates a common use for local reflection maps (defined in a +material). + + this material is highly reflective with no diffuse or ambient +contribution. Its reflection map is an image with silver streaks that +yields a chrome appearance when viewed as a reflection. + + ka 0 0 0 + kd 0 0 0 + ks .7 .7 .7 + illum 1 + refl -type sphere chrome.rla + + + Illumination models + + The following list defines the terms and vectors that are used in the +illumination model equations: + + Term Definition + + Ft Fresnel reflectance + Ft Fresnel transmittance + Ia ambient light + I light intensity + Ir intensity from reflected direction + (reflection map and/or ray tracing) + It intensity from transmitted direction + Ka ambient reflectance + Kd diffuse reflectance + Ks specular reflectance + Tf transmission filter + + Vector Definition + + H unit vector bisector between L and V + L unit light vector + N unit surface normal + V unit view vector + + The illumination models are: + + 0 This is a constant color illumination model. The color is the +specified Kd for the material. The formula is: + + color = Kd + + 1 This is a diffuse illumination model using Lambertian shading. The +color includes an ambient constant term and a diffuse shading term for +each light source. The formula is + + color = KaIa + Kd { SUM j=1..ls, (N * Lj)Ij } + + 2 This is a diffuse and specular illumination model using Lambertian +shading and Blinn's interpretation of Phong's specular illumination +model (BLIN77). The color includes an ambient constant term, and a +diffuse and specular shading term for each light source. The formula +is: + + color = KaIa + + Kd { SUM j=1..ls, (N*Lj)Ij } + + Ks { SUM j=1..ls, ((H*Hj)^Ns)Ij } + + 3 This is a diffuse and specular illumination model with reflection +using Lambertian shading, Blinn's interpretation of Phong's specular +illumination model (BLIN77), and a reflection term similar to that in +Whitted's illumination model (WHIT80). The color includes an ambient +constant term and a diffuse and specular shading term for each light +source. The formula is: + + color = KaIa + + Kd { SUM j=1..ls, (N*Lj)Ij } + + Ks ({ SUM j=1..ls, ((H*Hj)^Ns)Ij } + Ir) + + Ir = (intensity of reflection map) + (ray trace) + + 4 The diffuse and specular illumination model used to simulate glass +is the same as illumination model 3. When using a very low dissolve +(approximately 0.1), specular highlights from lights or reflections +become imperceptible. + + Simulating glass requires an almost transparent object that still +reflects strong highlights. The maximum of the average intensity of +highlights and reflected lights is used to adjust the dissolve factor. +The formula is: + + color = KaIa + + Kd { SUM j=1..ls, (N*Lj)Ij } + + Ks ({ SUM j=1..ls, ((H*Hj)^Ns)Ij } + Ir) + + 5 This is a diffuse and specular shading models similar to +illumination model 3, except that reflection due to Fresnel effects is +introduced into the equation. Fresnel reflection results from light +striking a diffuse surface at a grazing or glancing angle. When light +reflects at a grazing angle, the Ks value approaches 1.0 for all color +samples. The formula is: + + color = KaIa + + Kd { SUM j=1..ls, (N*Lj)Ij } + + Ks ({ SUM j=1..ls, ((H*Hj)^Ns)Ij Fr(Lj*Hj,Ks,Ns)Ij} + +Fr(N*V,Ks,Ns)Ir}) + + + 6 This is a diffuse and specular illumination model similar to that +used by Whitted (WHIT80) that allows rays to refract through a surface. +The amount of refraction is based on optical density (Ni). The +intensity of light that refracts is equal to 1.0 minus the value of Ks, +and the resulting light is filtered by Tf (transmission filter) as it +passes through the object. The formula is: + + color = KaIa + + Kd { SUM j=1..ls, (N*Lj)Ij } + + Ks ({ SUM j=1..ls, ((H*Hj)^Ns)Ij } + Ir) + + (1.0 - Ks) TfIt + + 7 This illumination model is similar to illumination model 6, except +that reflection and transmission due to Fresnel effects has been +introduced to the equation. At grazing angles, more light is reflected +and less light is refracted through the object. The formula is: + + color = KaIa + + Kd { SUM j=1..ls, (N*Lj)Ij } + + Ks ({ SUM j=1..ls, ((H*Hj)^Ns)Ij Fr(Lj*Hj,Ks,Ns)Ij} + +Fr(N*V,Ks,Ns)Ir}) + + + (1.0 - Kx)Ft (N*V,(1.0-Ks),Ns)TfIt + + 8 This illumination model is similar to illumination model 3 without +ray tracing. The formula is: + + color = KaIa + + Kd { SUM j=1..ls, (N*Lj)Ij } + + Ks ({ SUM j=1..ls, ((H*Hj)^Ns)Ij } + Ir) + + Ir = (intensity of reflection map) + + 9 This illumination model is similar to illumination model 4without +ray tracing. The formula is: + + + color = KaIa + + Kd { SUM j=1..ls, (N*Lj)Ij } + + Ks ({ SUM j=1..ls, ((H*Hj)^Ns)Ij } + Ir) + + Ir = (intensity of reflection map) + + 10 This illumination model is used to cast shadows onto an invisible +surface. This is most useful when compositing computer-generated +imagery onto live action, since it allows shadows from rendered objects +to be composited directly on top of video-grabbed images. The equation +for computation of a shadowmatte is formulated as follows. + + color = Pixel color. The pixel color of a shadowmatte material is +always black. + + color = black + + M = Matte channel value. This is the image channel which typically +represents the opacity of the point on the surface. To store the shadow +in the matte channel of the image, it is calculated as: + + M = 1 - W / P + + where: + + P = Unweighted sum. This is the sum of all S values for each light: + + P = S1 + S2 + S3 + ..... + + W = Weighted sum. This is the sum of all S values, each weighted by +the visibility factor (Q) for the light: + + W = (S1 * Q1) + (S2 * Q2) + ..... + + Q = Visibility factor. This is the amount of light from a particular +light source that reaches the point to be shaded, after traveling +through all shadow objects between the light and the point on the +surface. Q = 0 means no light reached the point to be shaded; it was +blocked by shadow objects, thus casting a shadow. Q = 1 means that +nothing blocked the light, and no shadow was cast. 0 < Q < 1 means that +the light was partially blocked by objects that were partially +dissolved. + + S = Summed brightness. This is the sum of the spectral sample +intensities for a particular light. The samples are variable, but the +default is 3: + + S = samp1 + samp2 + samp3. + diff --git a/doc/obj-spec.txt b/doc/obj-spec.txt new file mode 100644 index 0000000..2430367 --- /dev/null +++ b/doc/obj-spec.txt @@ -0,0 +1,292 @@ +Wavefront OBJ + +Also Known As: Wavefront Object, OBJ + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Type 3D Vector +Colors Unlimited +Compression Uncompressed +Maximum Image Size Unlimited +Multiple Images Per File Yes +Numerical Format NA +Originator Wavefront +Platform UNIX +Supporting Applications Advanced Visualizer +See Also Wavefront RLA + +Usage +Used to store and exchange 3D data. + +Comments +The Wavefront OBJ format is a useful standard for representing polygonal data +in ASCII form. + +Vendor specifications are available for this format. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Wavefront OBJ (object) files are used by Wavefront's Advanced Visualizer +application to store geometric objects composed of lines, polygons, and +free-form curves and surfaces. Wavefront is best known for its high-end +computer graphics tools, including modeling, animation, and image compositing +tools. These programs run on powerful workstations such as those made by +Silicon Graphics, Inc. + +Wavefront OBJ files are often stored with the extension ".obj" following the +UNIX convention of lowercase letters for filenames. The most recently +documented version of OBJ is v3.0, superseding the previous v2.11 release. + +Contents: +File Organization +File Details +For Further Information + +In Wavefront's 3D software, geometric object files may be stored in ASCII +format (using the ".obj" file extension) or in binary format (using the .MOD +extension). The binary format is proprietary and undocumented, so only the +ASCII format is described here. + +The OBJ file format supports lines, polygons, and free-form curves and +surfaces. Lines and polygons are described in terms of their points, while +curves and surfaces are defined with control points and other information +depending on the type of curve. The format supports rational and non-rational +curves, including those based on Bezier, B-spline, Cardinal (Catmull-Rom +splines), and Taylor equations. + +File Organization + +OBJ files do not require any sort of header, although it is common to begin the +file with a comment line of some kind. Comment lines begin with a hash mark +(#). Blank space and blank lines can be freely added to the file to aid in +formatting and readability. Each non-blank line begins with a keyword and may +be followed on the same line with the data for that keyword. Lines are read and +processed until the end of the file. Lines can be logically joined with the +line continuation character ( \ ) at the end of a line. + +The following keywords may be included in an OBJ file. In this list, keywords +are arranged by data type, and each is followed by a brief description. + +Vertex data: + + v Geometric vertices + vt Texture vertices + vn Vertex normals + vp Parameter space vertices + +Free-form curve/surface attributes: + + deg Degree + bmat Basis matrix + step Step size + cstype Curve or surface type + +Elements: + + p Point + l Line + f Face + curv Curve + curv2 2D curve + surf Surface + +Free-form curve/surface body statements: + + parm Parameter values + trim Outer trimming loop + hole Inner trimming loop + scrv Special curve + sp Special point + end End statement + +Connectivity between free-form surfaces: + + con Connect + +Grouping: + + g Group name + s Smoothing group + mg Merging group + o Object name + +Display/render attributes: + + bevel Bevel interpolation + c_interp Color interpolation + d_interp Dissolve interpolation + lod Level of detail + usemtl Material name + mtllib Material library + shadow_obj Shadow casting + trace_obj Ray tracing + ctech Curve approximation technique + stech Surface approximation technique + +File Details + +The most commonly encountered OBJ files contain only polygonal faces. To +describe a polygon, the file first describes each point with the "v" keyword, +then describes the face with the "f" keyword. The line of a face command +contains the enumerations of the points in the face, as 1-based indices into +the list of points, in the order they occurred in the file. For example, the +following describes a simple triangle: + +# Simple Wavefront file +v 0.0 0.0 0.0 +v 0.0 1.0 0.0 +v 1.0 0.0 0.0 +f 1 2 3 + +It is also possible to reference points using negative indices. This makes it +easy to describe the points in a face, then the face, without the need to store +a large list of points and their indexes. In this way, "v" commands and "f" +commands can be interspersed. + +v -0.500000 0.000000 0.400000 +v -0.500000 0.000000 -0.800000 +v -0.500000 1.000000 -0.800000 +v -0.500000 1.000000 0.400000 +f -4 -3 -2 -1 + +OBJ files do not contain color definitions for faces, although they can +reference materials that are stored in a separate material library file. The +material library can be loaded using the "mtllib" keyword. The material library +contains the definitions for the RGB values for the material's diffuse, +ambient, and specular colors, along with other characteristics such as +specularity, refraction, transparency, etc. + +The OBJ file references materials by name with the "usemtl" keyword. All faces +that follow are given the attributes of this material until the next "usemtl" +command is encountered. + +Faces and surfaces can be assigned into named groups with the "g" keyword. This +is used to create convenient sub-objects to make it easier to edit and animate +3D models. Faces can belong to more than one group. + +The following demonstrate more complicated examples of smooth surfaces of +different types, material assignment, line continuation, and grouping. + +Cube with Materials + +# This cube has a different material +# applied to each of its faces. + mtllib master.mtl + v 0.000000 2.000000 2.000000 + v 0.000000 0.000000 2.000000 + v 2.000000 0.000000 2.000000 + v 2.000000 2.000000 2.000000 + v 0.000000 2.000000 0.000000 + v 0.000000 0.000000 0.000000 + v 2.000000 0.000000 0.000000 + v 2.000000 2.000000 0.000000 + # 8 vertices + g front + usemtl red + f 1 2 3 4 + g back + usemtl blue + f 8 7 6 5 + g right + usemtl green + f 4 3 7 8 + g top + usemtl gold + f 5 1 4 8 + g left + usemtl orange + f 5 6 2 1 + g bottom + usemtl purple + f 2 6 7 3 + # 6 elements + +Bezier Patch + +# 3.0 Bezier patch +v -5.000000 -5.000000 0.000000 +v -5.000000 -1.666667 0.000000 +v -5.000000 1.666667 0.000000 +v -5.000000 5.000000 0.000000 +v -1.666667 -5.000000 0.000000 +v -1.666667 -1.666667 0.000000 +v -1.666667 1.666667 0.000000 +v -1.666667 5.000000 0.000000 +v 1.666667 -5.000000 0.000000 +v 1.666667 -1.666667 0.000000 +v 1.666667 1.666667 0.000000 +v 1.666667 5.000000 0.000000 +v 5.000000 -5.000000 0.000000 +v 5.000000 -1.666667 0.000000 +v 5.000000 1.666667 0.000000 +v 5.000000 5.000000 0.000000 +# 16 vertices +cstype bezier +deg 3 3 +# Example of line continuation +surf 0.000000 1.000000 0.000000 1.000000 13 14 \ + 15 16 9 10 11 12 5 6 7 8 1 2 3 4 +parm u 0.000000 1.000000 +parm v 0.000000 1.000000 +end +# 1 element + +Cardinal Curve + +# 3.0 Cardinal curve +v 0.940000 1.340000 0.000000 +v -0.670000 0.820000 0.000000 +v -0.770000 -0.940000 0.000000 +v 1.030000 -1.350000 0.000000 +v 3.070000 -1.310000 0.000000 +# 6 vertices +cstype cardinal +deg 3 +curv 0.000000 3.000000 1 2 3 4 5 6 +parm u 0.000000 1.000000 2.000000 3.000000 end +# 1 element + +Texture-Mapped Square + +# A 2 x 2 square mapped with a 1 x 1 square +# texture stretched to fit the square exactly. +mtllib master.mtl +v 0.000000 2.000000 0.000000 +v 0.000000 0.000000 0.000000 +v 2.000000 0.000000 0.000000 +v 2.000000 2.000000 0.000000 +vt 0.000000 1.000000 0.000000 +vt 0.000000 0.000000 0.000000 +vt 1.000000 0.000000 0.000000 +vt 1.000000 1.000000 0.000000 +# 4 vertices +usemtl wood +# The first number is the point, +# then the slash, +# and the second is the texture point +f 1/1 2/2 3/3 4/4 +# 1 element + +For Further Information + +For further information about the Wavefront OBJ format, see the specification. + +You can also contact: + +Wavefront Technologies +530 East Montecito Street +Santa Barbara, CA 93103 +Voice: 805-962-8117 +FAX: 805-963-0410 +WWW: http://www.aw.sgi.com/ + +Wavefront also maintains a toll-free support number and a BBS for its +customers. There are many Wavefront user groups, too. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +[txtpreva] [txtnexta] [txtupa] [txttoidx] +[btntoc] [btnglos] [btnmain] [btnfmt] [btnsoft] [btninet] [btnbook] + +Copyright © 1996, 1994 O'Reilly & Associates, Inc. All Rights Reserved. + -- cgit v1.2.3