| Simple Types | 
|---|
        | Name | Definition | 
|---|
        | pl_ZBuffer | The Z-buffer type. Usually used when allocating a zbuffer,
          usually float. | 
        | pl_Float | General floating point type, usually float or double | 
        | pl_IEEEFloat32 | 32 bit IEEE floating point, usually float or double.
          Only really used with .3DS reader | 
        | pl_sInt32 | Signed 32 bit integer, usually signed long int | 
        | pl_uInt32 | Unsigned 32 bit integer, usually unsigned long int | 
        | pl_sInt16 | Signed 16 bit integer, usually signed short int | 
        | pl_uInt16 | Unsigned 16 bit integer, usually unsigned short int | 
        | pl_sInt | Signed optimal integer, usually signed int | 
        | pl_uInt | Unsigned optimal bit integer, usually unsigned int | 
        | pl_Bool | Fake boolean value. Usually char. | 
        | pl_uChar | Unsigned 8 bit type, usually unsigned char | 
        | pl_sChar | Signed 8 bit type, usually signed char | 
      
      
        | Non-Simple Types | 
|---|
        | Name | Definition | 
|---|
        | pl_Cam | Camera type. See plCamera*(). Contents: 
          pl_Float Fov: Field of view in degrees. 
            Should be between 1 and 179
          pl_Float Aspect ratio: Aspect ratio,
            normally 1.0, but in wierd resolutions, this should be something
            like "screenwidth/screenheight * 3.0/4.0."
          pl_sChar Sort: How shall 
            plRender*() sort
            polygons? 0: no sorting. -1: front to back. 1: back to front.
          pl_Float ClipBack:
            sets the far clip plane. Any value less than or equal to 0.0 
            disables the far clip plane.
          pl_sInt
            ClipTop, ClipLeft, ClipBottom, ClipRight: screen clipping coords.
            Usually 0, 0, screenheight, screenwidth respectively.
          pl_uintScreenWidth, ScreenHeight:
            the screen width (line width) and screen height of the framebuffer.
          pl_sInt
            CenterX, CenterY: the place on the screen where 0,0,z projects to. 
            Usually screenwidth/2 and screenheight/2 respectively.   
          pl_Float X, Y, Z:
            The X Y and Z coordinates of the Camera in 
            Worldspace.
          pl_Float Pitch, Pan, Roll:
            The rotation of the Camera in Worldpsace.
            Pitch is the up-down rotation, with positive being up. Pan is 
            left-right rotation, with positive being right, and Roll is rotation
            around the viewing axis, with positive being clockwise.
          pl_uChar * frameBuffer:
            a pointer to the buffer of type pl_uChar, and dimensions
            screenwidth*screenheight to which rendering will occur.
          pl_ZBuffer * zBuffer:
            a pointer to the buffer of type pl_ZBuffer, and dimensions
            screenwidth*screenheight to which Z-buffering will occur. Or NULL,
            to disable Z-buffering.
           | 
        | pl_Light | Light type. See plLight*(). Contents: 
            pl_uChar Type: Type of light, one of
                PL_LIGHT_*
            pl_Float Xp, Yp, Zp:
               This can mean two things: 
                 If Type is PL_LIGHT_VECTOR: the unit vector of the light
                 If Type is PL_LIGHT_POINT_*: the position of the light
               pl_Float Intensity: 
               The intensity of the light. Usually from 0.0 to 1.0. Can be 
               greater and brightness will be clipped.
            pl_Float HalfDistSquared:
               The square of the distance at which 
               PL_LIGHT_POINT or 
               PL_LIGHT_POINT_DISTANCE 
               will be 1/2 brightness.
           | 
        | pl_Obj | Object type. See plObj*(). Contents: 
            pl_uInt32 NumVertices:
              the number of vertices in the object.
            pl_uInt32 NumFaces:
              the number of faces (triangles) in the object.
            pl_Vertex * Vertices:
              a pointer to an array of "NumVertices" vertices.
            pl_Face * Faces:
              a pointer to an array of "NumFaces" faces.
            pl_Obj Children[
              PL_MAX_CHILDREN]:
              a list of children. Either pointers to the children, or 0
              if no children.
            pl_Bool BackfaceCull:
              are backfacing triangles drawn in this object?
            pl_Bool BackfaceIllumination:
              are triangles illuminated from lights that are behind them?
            pl_Bool GenMatrix:
              generate a transformation matrix from the following?
            pl_Float Xp, Yp, Zp, Xa, Ya, Za:
              Translation and Rotation values. Translation values are in object
              space. Rotation values are in degrees. Rotations happen around 
              the X then Y then Z. These are only used if GenMatrix is set
              (see above)
            pl_Float Matrix[16]:
              A 4x4 transformation matrix which is used if GenMatrix is not set.
            pl_Float RotMatrix[16]:
              A 4x4 transformation matrix for normals (i.e. no translation) 
              which is used if GenMatrix is not set.
           | 
        | pl_Vertex | Vertex type. Used with pl_Obj.
           Contents: 
            pl_Float x, y, z: the 
                WorldSpace coordinates of the point.
            pl_Float xformedx, xformedy, xformedz:
                the transformed coordinates of the point.
            pl_Float nx, ny, nz: the 
                WorldSpace normal of the point.
            pl_Float
                xformednx, xformedny, xformednz: the transformed normal of the 
                point.
            | 
        | pl_Face | Face (triangle) type. Used with pl_Obj.
            Contents: 
            pl_Vertex *Vertices[3]: pointers to 
                the three vertices of the triangle.
            pl_Float nx, ny, nz: the normal of the
                triangle in object space.
            pl_Mat *Material: the material of the 
                face.
            pl_sInt32 Scrx[3], Scry[3]: the 
                projected screen coordinates of the vertices, in 16.16 fixed
                point.
            pl_Float Scrz[3]:
                the reciprocal of the transformed Z of the vertices.
            pl_sInt32 MappingU[3], MappingV[3]:
                the 16.16 fixed point mapping coordinates of the face
            pl_sInt32 eMappingU[3], eMappingV[3]:
                the 16.16 fixed point environment mapping coordinates 
                of the face (generated on the fly)
            pl_Float fShade:
                the shade of the face (for flat shading), 0.0->1.0
            pl_Float sLighting:
                the static lighting value for flat shading, usually 0.0
            pl_Float Shades[3]:
                the shades of the vertices (for Gouraud shading), 0.0->1.0
            pl_Float vsLighting[3]:
                the static lighting values for Gouraud shading, usually 0.0
           | 
        | pl_Mat | Material Type. Used with pl_Face. See 
          plMat*() Contents: 
            pl_sInt Ambient[3]:
                RGB of surface color (0-255 is a good range) 
            pl_sInt Diffuse[3]:
                RGB of diffuse reflection (0-255 is a good range)
            pl_sInt Specular[3]:
                RGB of "specular" highlights (0-255 is a good range)
            pl_uInt Shininess:
                Shininess of material. 1 is dullest, 2 is shinier, etc.
            pl_Float FadeDist:
                For distance shading, distance at which intensity is 0
            pl_uChar ShadeType:
                Shade type: PL_SHADE_*
            pl_uChar Transparent:
                Transparency index (0 = none, 4 = alot)
                Note: transparencies disable textures 
            pl_uChar PerspectiveCorrect:
                Correct textures every n pixels. Will be rounded down to the 
                nearest power of two. i.e. 20 will become 16. Values over 64
                will become 64.
            pl_Texture *Texture:
                Texture map, or NULL if none.
            pl_Texture *Environment:
                Environment map, or NULL if none. Note: if both Texture and 
                Environment are set, shading will be disabled.
            pl_Float TexScaling: 
                Texture map scaling (usually 1.0)
            pl_Float EnvScaling: 
                Environment map scaling (usually 1.0)
            pl_Bool zBufferable:
                Can this material be zbuffered? Usually true.
            pl_uInt NumGradients:
                Desired number of gradients to be used 
            _*: Internal variables (see pl_types.h for more info)
           | 
        | pl_Texture | Texture Type. Used with pl_Mat. See 
          plTex*(). Contents: 
            pl_uChar *Data: the texture data, one
               byte per pixel.
            pl_uChar *PaletteData: the palette data,
               256 RGB triplets. Each value should be 0-255.
            pl_uChar Width, Height: the log2 of 
               dimensions. i.e. 8, 8 for a 256x256 texture.
            pl_uInt iWidth, iHeight: the actual 
               dimensions. i.e. 256,256 for a 256x256 texture.
            pl_Float uScale, vScale: the texture
               scaling, usually 1.0, 1.0
            pl_uInt NumColors: the number of colors
               used in the texture.
           | 
        | pl_Spline | Spline Type. See plSpline*(). Contents: 
            pl_Float *keys:
               the key data, keyWidth*numKeys plFloats.
            pl_sInt keyWidth: number of pl_Floats
               per key. 
            pl_sInt numKeys: number of keys in spline
            pl_Float cont: The continuity of the 
               spline. Should be between -1.0 and 1.0.
            pl_Float bias: The bias of the 
               spline. Should be between -1.0 and 1.0.
            pl_Float tens: The tension of the 
               spline. Should be between -1.0 and 1.0.
           |