edu.d.umn.geometry
Class InterleavedTriangleStripArray

java.lang.Object
  extended by javax.media.j3d.SceneGraphObject
      extended by javax.media.j3d.NodeComponent
          extended by javax.media.j3d.Geometry
              extended by javax.media.j3d.GeometryArray
                  extended by javax.media.j3d.GeometryStripArray
                      extended by javax.media.j3d.TriangleStripArray
                          extended by edu.d.umn.geometry.InterleavedTriangleStripArray

public class InterleavedTriangleStripArray
extends javax.media.j3d.TriangleStripArray

This class is a specialization of the TriangleStripArray created to enhance performance of generating triangle strips. This is done by adding a generateNormals method to calculate, in place the normals for each vertex. This saves the overhead in processor time and memory required for using the NormalsGenerator object.


Field Summary
 
Fields inherited from class javax.media.j3d.GeometryArray
ALLOW_COLOR_READ, ALLOW_COLOR_WRITE, ALLOW_COORDINATE_READ, ALLOW_COORDINATE_WRITE, ALLOW_COUNT_READ, ALLOW_COUNT_WRITE, ALLOW_FORMAT_READ, ALLOW_NORMAL_READ, ALLOW_NORMAL_WRITE, ALLOW_REF_DATA_READ, ALLOW_REF_DATA_WRITE, ALLOW_TEXCOORD_READ, ALLOW_TEXCOORD_WRITE, ALLOW_VERTEX_ATTR_READ, ALLOW_VERTEX_ATTR_WRITE, BY_REFERENCE, COLOR_3, COLOR_4, COORDINATES, INTERLEAVED, NORMALS, TEXTURE_COORDINATE_2, TEXTURE_COORDINATE_3, TEXTURE_COORDINATE_4, USE_COORD_INDEX_ONLY, USE_NIO_BUFFER, VERTEX_ATTRIBUTES
 
Fields inherited from class javax.media.j3d.Geometry
ALLOW_INTERSECT
 
Constructor Summary
InterleavedTriangleStripArray(int vertexCount, int vertexFormat, int[] stripVertexCounts)
          Setups the offset of the data based on the vertex format passed in.
 
Method Summary
static void averageNormals(double[][] normals, int nNormals, double[] avgNormal)
          This method calculates the average of a set of normals stored in an array of doubles.
 void calcNormalCCW(double[] normal, float[] vertexData, int v0, int v1, int v2)
          Calculate normal, assumes counter-clockwise order of vertices
 void calcNormalCW(double[] norm, float[] vertexData, int v0, int v1, int v2)
          Calculate normal, assumes clockwise order of vertices
 void changeExageration(float oldAmount, float newAmount)
          Resets to exageration of 1, then applies the new value.
 void generateNormals(boolean averageAdjacentColumns)
          Traverse interleaved vertex data and generate normal values.
 void normalize(float[] vertexData, int v)
          normalize (make length equal 1) vector from origin to normal
 
Methods inherited from class javax.media.j3d.TriangleStripArray
cloneNodeComponent
 
Methods inherited from class javax.media.j3d.GeometryStripArray
getNumStrips, getStripVertexCounts, setStripVertexCounts, setValidVertexCount
 
Methods inherited from class javax.media.j3d.GeometryArray
getColor, getColor, getColor, getColor, getColor, getColor, getColorRef3b, getColorRef3f, getColorRef4b, getColorRef4f, getColorRefBuffer, getColorRefByte, getColorRefFloat, getColors, getColors, getColors, getColors, getColors, getColors, getCoordinate, getCoordinate, getCoordinate, getCoordinate, getCoordinates, getCoordinates, getCoordinates, getCoordinates, getCoordRef3d, getCoordRef3f, getCoordRefBuffer, getCoordRefDouble, getCoordRefFloat, getInitialColorIndex, getInitialCoordIndex, getInitialNormalIndex, getInitialTexCoordIndex, getInitialVertexAttrIndex, getInitialVertexIndex, getInterleavedVertexBuffer, getInterleavedVertices, getNormal, getNormal, getNormalRef3f, getNormalRefBuffer, getNormalRefFloat, getNormals, getNormals, getTexCoordRef2f, getTexCoordRef3f, getTexCoordRefBuffer, getTexCoordRefFloat, getTexCoordSetCount, getTexCoordSetMap, getTexCoordSetMapLength, getTextureCoordinate, getTextureCoordinate, getTextureCoordinate, getTextureCoordinate, getTextureCoordinate, getTextureCoordinate, getTextureCoordinate, getTextureCoordinates, getTextureCoordinates, getTextureCoordinates, getTextureCoordinates, getTextureCoordinates, getTextureCoordinates, getTextureCoordinates, getValidVertexCount, getVertexAttr, getVertexAttr, getVertexAttr, getVertexAttr, getVertexAttrCount, getVertexAttrRefBuffer, getVertexAttrRefFloat, getVertexAttrs, getVertexAttrs, getVertexAttrs, getVertexAttrs, getVertexAttrSizes, getVertexCount, getVertexFormat, setColor, setColor, setColor, setColor, setColor, setColor, setColorRef3b, setColorRef3f, setColorRef4b, setColorRef4f, setColorRefBuffer, setColorRefByte, setColorRefFloat, setColors, setColors, setColors, setColors, setColors, setColors, setColors, setColors, setColors, setColors, setColors, setColors, setCoordinate, setCoordinate, setCoordinate, setCoordinate, setCoordinates, setCoordinates, setCoordinates, setCoordinates, setCoordinates, setCoordinates, setCoordinates, setCoordinates, setCoordRef3d, setCoordRef3f, setCoordRefBuffer, setCoordRefDouble, setCoordRefFloat, setInitialColorIndex, setInitialCoordIndex, setInitialNormalIndex, setInitialTexCoordIndex, setInitialVertexAttrIndex, setInitialVertexIndex, setInterleavedVertexBuffer, setInterleavedVertices, setNormal, setNormal, setNormalRef3f, setNormalRefBuffer, setNormalRefFloat, setNormals, setNormals, setNormals, setNormals, setTexCoordRef2f, setTexCoordRef3f, setTexCoordRefBuffer, setTexCoordRefFloat, setTextureCoordinate, setTextureCoordinate, setTextureCoordinate, setTextureCoordinate, setTextureCoordinate, setTextureCoordinate, setTextureCoordinate, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setVertexAttr, setVertexAttr, setVertexAttr, setVertexAttr, setVertexAttrRefBuffer, setVertexAttrRefFloat, setVertexAttrs, setVertexAttrs, setVertexAttrs, setVertexAttrs, setVertexAttrs, setVertexAttrs, setVertexAttrs, setVertexAttrs, updateData
 
Methods inherited from class javax.media.j3d.NodeComponent
cloneNodeComponent, duplicateNodeComponent, duplicateNodeComponent, getDuplicateOnCloneTree, setDuplicateOnCloneTree
 
Methods inherited from class javax.media.j3d.SceneGraphObject
clearCapability, clearCapabilityIsFrequent, duplicateSceneGraphObject, getCapability, getCapabilityIsFrequent, getName, getUserData, isCompiled, isLive, setCapability, setCapabilityIsFrequent, setName, setUserData, toString, updateNodeReferences
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

InterleavedTriangleStripArray

public InterleavedTriangleStripArray(int vertexCount,
                                     int vertexFormat,
                                     int[] stripVertexCounts)
Setups the offset of the data based on the vertex format passed in. Currently not in use, as the offsets are hard coded.

Parameters:
vertexCount - the number of vertex elements in this array
vertexFormat - a mask indicating which components are present in each vertex. This is specified as one or more individual flags that are bitwise "OR"ed together to describe the per-vertex data. The flags include: COORDINATES, to signal the inclusion of vertex positions--always present; NORMALS, to signal the inclusion of per vertex normals; one of COLOR_3, COLOR_4, to signal the inclusion of per vertex colors (without or with color information); and one of TEXTURE_COORDINATE_2 or TEXTURE_COORDINATE_3, to signal the inclusion of per-vertex texture coordinates 2D or 3D.
stripVertexCounts - - array that specifies the count of the number of vertices for each separate strip. The length of this array is the number of separate strips.
Method Detail

generateNormals

public void generateNormals(boolean averageAdjacentColumns)
Traverse interleaved vertex data and generate normal values.

Parameters:
averageAdjacentColumns - if true, then the algorithm assumes that the strips comprise a grid whereby adjacent strips have common vertices. The normals of the vertices are averaged to eliminate stripes.

calcNormalCW

public void calcNormalCW(double[] norm,
                         float[] vertexData,
                         int v0,
                         int v1,
                         int v2)
Calculate normal, assumes clockwise order of vertices

Parameters:
vertexData - the interleaved data.
norm - reference to a double[3] array to receive the result
v0 - index of first vertex in interleaved data
v1 - index of middle vertex in interleaved data
v2 - index of last vertex in interleaved data

calcNormalCCW

public void calcNormalCCW(double[] normal,
                          float[] vertexData,
                          int v0,
                          int v1,
                          int v2)
Calculate normal, assumes counter-clockwise order of vertices

Parameters:
vertexData - the interleaved data.
normal - reference to a double[3] array to receive the result
v0 - index of first coordinates in interleaved data
v1 - index of middle coordinates in interleaved data
v2 - index of last coordinates in interleaved data

averageNormals

public static void averageNormals(double[][] normals,
                                  int nNormals,
                                  double[] avgNormal)
This method calculates the average of a set of normals stored in an array of doubles.

Parameters:
normals - a an N by 3 double array holding vector normals to be averaged
nNormals - number of normals to average
avgNormal - destination for the averaged normal

normalize

public void normalize(float[] vertexData,
                      int v)
normalize (make length equal 1) vector from origin to normal

Parameters:
vertexData - interleaved array of floats
v - index into interleaved data of vertex data to be normalized.

changeExageration

public void changeExageration(float oldAmount,
                              float newAmount)
Resets to exageration of 1, then applies the new value.

Parameters:
oldAmount - last known exageration value.
newAmount - desired exageration value.