Aviatrix3D
2.1.0

org.j3d.aviatrix3d
Class IndexedTriangleArray

java.lang.Object
  extended by org.j3d.aviatrix3d.SceneGraphObject
      extended by org.j3d.aviatrix3d.NodeComponent
          extended by org.j3d.aviatrix3d.Geometry
              extended by org.j3d.aviatrix3d.VertexGeometry
                  extended by org.j3d.aviatrix3d.IndexedVertexGeometry
                      extended by org.j3d.aviatrix3d.IndexedTriangleArray
All Implemented Interfaces:
java.lang.Comparable, LeafPickTarget, PickableObject, PickTarget, DeletableRenderable, GeometryRenderable, Renderable

public class IndexedTriangleArray
extends IndexedVertexGeometry

An OpenGL Indexed IndexedTriangleArray.

To do the drawing, this class uses the glDrawElements() function.

Setting geometry

Part of the optimisation we make is to only copy into the underlying structures the exact number of coordinates, normals etc that are needed. To know this number, we need to know how many coordinates exist before attempting to set anything else. When constructing, or updating, geometry, you should always make sure that you first set the vertex list, then the sizing information for the strip or fan counts, and then set normals as needed.

Version:
$Revision: 1.31 $
Author:
Justin Couch

Field Summary
 
Fields inherited from class org.j3d.aviatrix3d.IndexedVertexGeometry
indexBuffer, indices, numIndices, numIndicesUsed, vboElementIdMap
 
Fields inherited from class org.j3d.aviatrix3d.VertexGeometry
ATTRIB_CLEAR, ATTRIB_MASK, attribIds, ATTRIBS, attributes, COLOR_3, COLOR_4, COLOR_CLEAR, COLOR_MASK, COLOR_SINGLE, COLOR2, COLOR2_CLEAR, COLOR2_MASK, color2Buffer, color2s, colorBuffer, colors, COORDINATE_2, COORDINATE_3, COORDINATE_4, COORDINATE_CLEAR, COORDINATE_MASK, coordinates, dataChanged, EDGE_CLEAR, EDGE_MASK, EDGES, FOG, FOG_CLEAR, FOG_MASK, fogBuffer, fogCoords, hasMultiTextureAPI, INTERSECT_ALL, INTERSECT_COLOR, INTERSECT_COORDS, INTERSECT_NORMAL, INTERSECT_TEXCOORDS_MULTI, INTERSECT_TEXCOORDS_SINGLE, maxTextureUnits, NORMAL_CLEAR, normalBuffer, normals, NORMALS, numCoords, numRenderedTextureSets, numRequiredCoords, numTextureArrays, numTextureSets, TEXTURE_CLEAR, TEXTURE_COORDINATE_1, TEXTURE_COORDINATE_2, TEXTURE_COORDINATE_3, TEXTURE_COORDINATE_4, TEXTURE_COORDINATE_MULTI, TEXTURE_COORDINATE_SINGLE, TEXTURE_MASK, TEXTURE_SET_AVAILABLE, TEXTURE_SET_CLEAR, textureBuffer, textures, textureSets, textureTypes, useVbo, VBO_HINT_DYNAMIC, VBO_HINT_STATIC, VBO_HINT_STREAM, vboAvailable, vboHint, vboIdMap, vboQueryComplete, vertexBuffer, vertexFormat, wkPolygon
 
Fields inherited from class org.j3d.aviatrix3d.Geometry
bounds, implicitBounds, internalUpdater, INVALID_BOUNDS, lastParentList, parentList, pickFlags, validAlpha
 
Fields inherited from class org.j3d.aviatrix3d.NodeComponent
lastParent, liveCount
 
Fields inherited from class org.j3d.aviatrix3d.SceneGraphObject
alive, LISTENER_SET_TIMING_ERR_PROP, updateHandler
 
Fields inherited from interface org.j3d.aviatrix3d.picking.PickableObject
COLLIDABLE_OBJECT, GENERAL_OBJECT, PROXIMITY_OBJECT, VISIBLE_OBJECT
 
Fields inherited from interface org.j3d.aviatrix3d.picking.PickTarget
CUSTOM_PICK_TYPE, GROUP_PICK_TYPE, LEAF_PICK_TYPE, SINGLE_PICK_TYPE
 
Constructor Summary
IndexedTriangleArray()
          Constructs a IndexedTriangleArray with default values.
IndexedTriangleArray(boolean useVbo, int vboHint)
          Constructs an instance.
 
Method Summary
 int compareTo(IndexedTriangleArray ta)
          Compares this object with the specified object for order.
 int compareTo(java.lang.Object o)
          Compares this object with the specified object for order.
protected  int computeBufferSize()
          Compute the total size of vertex buffer data, used for allocating VBOs.
 boolean equals(IndexedTriangleArray ta)
          Compares this object with the specified object to check for equivalence.
 boolean equals(java.lang.Object o)
          Compare this object for equality to the given object.
protected  int fillBufferData(javax.media.opengl.GL gl)
          Fill VBOs with vertex buffer data.
 boolean pickLineRay(float[] origin, float[] direction, boolean findAny, float[] dataOut, int dataOutFlags)
          Check for all intersections against this geometry using a line ray and return the exact distance away of the closest picking point.
 boolean pickLineSegment(float[] start, float[] end, boolean findAny, float[] dataOut, int dataOutFlags)
          Check for all intersections against this geometry using a line segment and return the exact distance away of the closest picking point.
protected  void recomputeBounds()
          Internal method to recalculate the implicit bounds of this Node.
 void render(javax.media.opengl.GL gl)
          Issue ogl commands needed for this renderable object.
 void setEdgeFlags(boolean[] flags)
          Set the edge flag reference to the new array.
 
Methods inherited from class org.j3d.aviatrix3d.IndexedVertexGeometry
cleanup, createBuffer, getIndices, getValidIndexCount, isVisible, setIndices, setVBOEnabled, setVertexStateVBO
 
Methods inherited from class org.j3d.aviatrix3d.VertexGeometry
clearVertexState, getColor, getColors, getFogCoordinates, getFogCoordinates, getNormal, getNormals, getSecondaryColors, getSecondaryColors, getTextureCoordinate, getTextureCoordinates, getValidVertexCount, getVBOEnabled, getVBOHint, getVertex, getVertexType, getVertices, initPolygonDetails, is2D, isMultiTextureAllowed, numTextureUnits, ray3DQuadChecked, ray3DTriangleChecked, setAttributes, setAttributes, setAttributes, setAttributes, setAttributes, setColors, setFogCoordinates, setLive, setNormals, setSecondaryColors, setSingleColor, setTextureCoordinates, setTextureCoordinates, setTextureCoordinates, setTextureSetMap, setTextureSetMap, setValidVertexCount, setVBOHint, setVertexState, setVertices, setVertices, updateBounds
 
Methods inherited from class org.j3d.aviatrix3d.Geometry
addParent, boundsChanged, checkPickMask, getBounds, getPickableBounds, getPickMask, getPickTargetType, hasTransparency, markBoundsDirty, pickBatch, pickSingle, removeParent, setBounds, setPickMask
 
Methods inherited from class org.j3d.aviatrix3d.NodeComponent
addParent, getParents, numParents, removeParent
 
Methods inherited from class org.j3d.aviatrix3d.SceneGraphObject
checkForCyclicChild, checkForCyclicParent, dataChanged, getAppUpdateWriteTimingMessage, getBoundsWriteTimingMessage, getDataWriteTimingMessage, getUserData, isLive, setUpdateHandler, setUserData
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.j3d.aviatrix3d.rendering.GeometryRenderable
hasTransparency
 

Constructor Detail

IndexedTriangleArray

public IndexedTriangleArray()
Constructs a IndexedTriangleArray with default values.


IndexedTriangleArray

public IndexedTriangleArray(boolean useVbo,
                            int vboHint)
Constructs an instance.

Parameters:
useVbo - Should we use vertex buffer objects
vboHint - Hints for how to setup VBO. Valid values are VBO_HINT_*
Method Detail

render

public void render(javax.media.opengl.GL gl)
Issue ogl commands needed for this renderable object.

Parameters:
gl - The gl context to draw with

computeBufferSize

protected int computeBufferSize()
Compute the total size of vertex buffer data, used for allocating VBOs. It is called by setVertexStateVBO, and should not be called other places.

Must be overridden in subclasses that has vertex data in addition to what is in VertexGeometry. See TriangleArray for examples.

Overrides:
computeBufferSize in class VertexGeometry

fillBufferData

protected int fillBufferData(javax.media.opengl.GL gl)
Fill VBOs with vertex buffer data. The VBO must be bound and allocated with glBufferData before the method is called. This method is called by setVertexStateVBO, and should not be called other places.

Must be overridden in subclasses that has vertex data in addition to what is in VertexGeometry. See TriangleArray for examples.

Overrides:
fillBufferData in class IndexedVertexGeometry

pickLineSegment

public boolean pickLineSegment(float[] start,
                               float[] end,
                               boolean findAny,
                               float[] dataOut,
                               int dataOutFlags)
                        throws NotPickableException
Check for all intersections against this geometry using a line segment and return the exact distance away of the closest picking point.

Specified by:
pickLineSegment in interface LeafPickTarget
Overrides:
pickLineSegment in class Geometry
Parameters:
start - The start point of the segment
end - The end point of the segment
findAny - True if it only has to find a single intersection and can exit as soon as it finds the first intersection. False if it must find the closest polygon
dataOut - An array to put the data in for the intersection. Exact format is described by the flags
dataOutFlags - A set of derived-class specific flags describing what data should be included in the output array
Returns:
True if an intersection was found according to the input request
Throws:
NotPickableException - This object has been marked as non pickable, but you decided to try to call the method anyway

pickLineRay

public boolean pickLineRay(float[] origin,
                           float[] direction,
                           boolean findAny,
                           float[] dataOut,
                           int dataOutFlags)
                    throws NotPickableException
Check for all intersections against this geometry using a line ray and return the exact distance away of the closest picking point. Default implementation always returns false indicating that nothing was found. Derived classes should override and provide a real implementation.

Specified by:
pickLineRay in interface LeafPickTarget
Overrides:
pickLineRay in class Geometry
Parameters:
origin - The start point of the ray
direction - The direction vector of the ray
findAny - True if it only has to find a single intersection and can exit as soon as it finds the first intersection. False if it must find the closest polygon
dataOut - An array to put the data in for the intersection. Exact format is described by the flags
dataOutFlags - A set of derived-class specific flags describing what data should be included in the output array
Returns:
True if an intersection was found according to the input request
Throws:
NotPickableException - This object has been marked as non pickable, but you decided to try to call the method anyway

recomputeBounds

protected void recomputeBounds()
Internal method to recalculate the implicit bounds of this Node.

Overrides:
recomputeBounds in class IndexedVertexGeometry

compareTo

public int compareTo(java.lang.Object o)
              throws java.lang.ClassCastException
Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

Parameters:
o - The objec to be compared
Returns:
-1, 0 or 1 depending on order
Throws:
java.lang.ClassCastException - The specified object's type prevents it from being compared to this Object

equals

public boolean equals(java.lang.Object o)
Compare this object for equality to the given object.

Specified by:
equals in interface Renderable
Overrides:
equals in class java.lang.Object
Parameters:
o - The object to be compared
Returns:
True if these represent the same values

setEdgeFlags

public void setEdgeFlags(boolean[] flags)
                  throws java.lang.IllegalArgumentException,
                         InvalidWriteTimingException
Set the edge flag reference to the new array. The number of valid items is taken to be the length of the array (there's only one flag per edge). This replaces the existing edge flag array reference with the new reference. If set to null, will clear the use of edge flags.

In a live scene graph, can only be called during the data changed callback.

Parameters:
flags - The new array reference to use for edge flag information
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method
java.lang.IllegalArgumentException

compareTo

public int compareTo(IndexedTriangleArray ta)
Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

Parameters:
ta - The argument instance to be compared
Returns:
-1, 0 or 1 depending on order

equals

public boolean equals(IndexedTriangleArray ta)
Compares this object with the specified object to check for equivalence.

Parameters:
ta - The geometry instance to be compared
Returns:
true if the objects represent identical values

Aviatrix3D
2.1.0

Latest Info from http://aviatrix3d.j3d.org/
Copyright © 2003 - 2009 j3d.org