Aviatrix3D
2.1.0

org.j3d.aviatrix3d
Class VertexGeometry

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
All Implemented Interfaces:
java.lang.Comparable, LeafPickTarget, PickableObject, PickTarget, DeletableRenderable, GeometryRenderable, Renderable
Direct Known Subclasses:
IndexedVertexGeometry, LineArray, LineStripArray, PointArray, QuadArray, QuadStripArray, TriangleArray, TriangleFanArray, TriangleStripArray

public abstract class VertexGeometry
extends Geometry
implements GeometryRenderable, DeletableRenderable

Common representation of all vertex-based geometry.

This class represents the raw values of the geometry. How these are turned into a rendered primitive by OpenGL is dependent on the derived class. Internally all the geometry is stored by reference to the user provided array of data, but a copy is made and placed in an instance of a FloatBuffer. The buffer is used as it is an optimisation step used at the OpenGL level for faster rendering. If the user changes the values in their array, we won't know about it unless the user calls the appropriate setter method, at which point we'll update our array.

Currently the class does not take any sort of optimisation hints. This is a design task in the future. For example, we would like to hint that the class should use interleaved geometry instead of a single array for each data type.

For the alpha flag setting, the current approach is pretty dumb. If you have hasAlpha as true in the setColor() method call then we blindly assume that you really do have some values that have non-one transparency, and thus it will get put into the list of transparent objects during transparency sorting. If you really want to avoid this, then only set 3-component colour values.

Geometry may have one of two forms of color. The traditional per-vertex colours are available. In this mode there must be one colour value for each vertex value provided. We do not allow short arrays to be provided, and arrays of values longer than the current number of vertices ignore the extras. In the second mode, a single colour value can be supplied that is applied to all the geometry in this instance. This is useful if you want to have coloured geometry rendering without the lighting effects that would require the use of material properties. An advantage is that far less data is pushed to the video card and less state changing too. It is particularly useful for CAD-style data that only uses per-part colours with no texturing and no lighting.

Reading Values

The data stored here is kept by reference as well as the copy to the internal buffers. The getter methods provided here copy the referenced array into the user provided array. This can be a significant performance hit. If you need to access the data and the user application is keeping references to the provided arrays, there is no need to use the getter methods here - just read the array directly. We make no changes, so what you put in is what you would get out too.

Picking Flags

A number of flags are defined for the picking that allow the user to define what they would like returned in the data array. If more than one flag is specified, the order needs to be known so that sense can be made from the array. The order is defined as follows:

If a flag value of zero is defined, then nothing is returned, but a geometry-base intersection test is performed and the return value is still correctly set.

Internationalisation Resource Names

Version:
$Revision: 1.79 $
Author:
Justin Couch

Field Summary
protected static int ATTRIB_CLEAR
          Mask to clear the shader vertex attributes setting
protected static int ATTRIB_MASK
          Mask to work out if shader vertex attributes are used
protected  int[] attribIds
          Listing of the valid attribute IDs for rendering
protected static int ATTRIBS
          Edge values are shader vertex attributes in the data
protected  org.j3d.util.IntHashMap attributes
          Map of the attribute Ids to their data (ref to user array).
protected static int COLOR_3
          RGB colour values are supplied in the data
protected static int COLOR_4
          RGBA colour values are supplied in the data
protected static int COLOR_CLEAR
          Mask to clear the per-vertex colour setting
protected static int COLOR_MASK
          Mask to work out if colours are used
protected static int COLOR_SINGLE
          A single colour value is supplied in the data.
protected static int COLOR2
          Secondary color values are supplied in the data
protected static int COLOR2_CLEAR
          Mask to clear the per-vertex secondary colour setting
protected static int COLOR2_MASK
          Mask to work out if secondary colours are used
protected  java.nio.FloatBuffer color2Buffer
          Buffer for holding secondary color data
protected  float[] color2s
          Reference to the user array of secondary colors used
protected  java.nio.FloatBuffer colorBuffer
          Buffer for holding colour data
protected  float[] colors
          Reference to the user array of colors used
static int COORDINATE_2
          2D Coordinate information is included in the vertex values
static int COORDINATE_3
          3D Coordinate information is included in the vertex values
static int COORDINATE_4
          4D Coordinate information is included in the vertex values
protected static int COORDINATE_CLEAR
          Mask to clear the coordinate setting
protected static int COORDINATE_MASK
          Mask to work out what coordinates are used
protected  float[] coordinates
          Reference to the user array of coordinates used
protected  GLStateMap dataChanged
          State map indicating sources have changed
protected static int EDGE_CLEAR
          Mask to clear the edge flag setting
protected static int EDGE_MASK
          Mask to work out if edge flags are used
protected static int EDGES
          Edge values are supplied in the data
protected static int FOG
          Fog coordinate values are supplied in the data
protected static int FOG_CLEAR
          Mask to clear the fog coordinate setting
protected static int FOG_MASK
          Mask to work out if fog coordinates are used
protected  java.nio.FloatBuffer fogBuffer
          Buffer for holding fog coordinate data
protected  float[] fogCoords
          Reference to the user array of fog coordinates used
protected static boolean hasMultiTextureAPI
          Global flag to know if we are capable of rendering multitextures.
static int INTERSECT_ALL
          Bit mask combining everything to return all information available
static int INTERSECT_COLOR
          Bit mask to select colour information to be returned.
static int INTERSECT_COORDS
          Bit mask to select vertex information to be returned.
static int INTERSECT_NORMAL
          Bit mask to select normal information to be returned.
static int INTERSECT_TEXCOORDS_MULTI
          Bit mask to select all texture coordinates of all units.
static int INTERSECT_TEXCOORDS_SINGLE
          Bit mask to select the texture coordinates of just the first unit.
protected static int maxTextureUnits
          Global flag indicating the maximum number of texture units the current hardware supports.
protected static int NORMAL_CLEAR
          Mask to clear the normal setting
protected  java.nio.FloatBuffer normalBuffer
          Buffer for holding normal data
protected  float[] normals
          Reference to the user array of normals used
protected static int NORMALS
          Normal information is included in the vertex values
protected  int numCoords
          Number of valid entries in the coordinate array
protected  int numRenderedTextureSets
          Maximum number of renderable sets.
protected  int numRequiredCoords
          The number of coordinates actually required as defined by the geometry type.
protected  int numTextureArrays
          The number of valid texture arrays in the textures variable
protected  int numTextureSets
          The number of texture sets to use from the textureSet array
protected static int TEXTURE_CLEAR
          Mask to clear the texture coordinate setting
static int TEXTURE_COORDINATE_1
          1D texture coordinates are included in the vertex values
static int TEXTURE_COORDINATE_2
          2D texture coordinates are included in the vertex values
static int TEXTURE_COORDINATE_3
          3D texture coordinates are included in the vertex values
static int TEXTURE_COORDINATE_4
          4D texture coordinates are included in the vertex values
protected static int TEXTURE_COORDINATE_MULTI
          Multiple sets of texture coordinates are included in the vertex values
protected static int TEXTURE_COORDINATE_SINGLE
          Single set of texture coordinates are included in the vertex values
protected static int TEXTURE_MASK
          Mask to work out if texture coordinates are used
protected static int TEXTURE_SET_AVAILABLE
          Has a valid texture set provided
protected static int TEXTURE_SET_CLEAR
          Has a valid texture set provided
protected  java.nio.FloatBuffer[] textureBuffer
          Buffer for holding texture coordinate data
protected  float[][] textures
          Reference to the user array of textures used, indexed by set
protected  int[] textureSets
          The texture set map array that describes how to map the arrays
protected  int[] textureTypes
          Flags for the texture type for each array.
protected  boolean useVbo
          Should we use VBO's to store data
static int VBO_HINT_DYNAMIC
          VBO Hint for Dynamic geometry
static int VBO_HINT_STATIC
          VBO Hint for Static geometry
static int VBO_HINT_STREAM
          VBO Hint for Streamed geometry
protected static boolean vboAvailable
          Are VBO's available
protected  int vboHint
          How are VBO's going to be used
protected  java.util.HashMap<javax.media.opengl.GL,java.lang.Integer> vboIdMap
          Map of VBO IDs.
protected static boolean vboQueryComplete
          Is the gl query for VBOs done?
protected  java.nio.FloatBuffer vertexBuffer
          Buffer for holding vertex data
protected  int vertexFormat
          The format of the geometry used
protected  float[] wkPolygon
          Working places for a single quad/triangle
 
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
protected VertexGeometry()
          Constructs an instance with pre-defined values with default values.
protected VertexGeometry(boolean useVbo, int vboHint)
          Constructs an instance.
 
Method Summary
 void cleanup(javax.media.opengl.GL gl)
          Cleanup the object now for the given GL context.
protected  void clearVertexState(javax.media.opengl.GL gl)
          Convenience method to clear the previously set state in the rendering pipeline.
protected  int computeBufferSize()
          Compute the total size of vertex buffer data, used for allocating VBOs.
protected  int fillBufferData(javax.media.opengl.GL gl)
          Fill VBOs with vertex buffer data.
 void getColor(int index, float[] color)
          Get the color values at the given index.
 void getColors(float[] col)
          Retrieve the colours that are currently set.
 void getFogCoordinates(float[] fogs)
          Retrieve the fog coordinates that are currently set.
 void getFogCoordinates(int index, float[] fogs)
          Retrieve the fog coordinates at the given index.
 void getNormal(int index, float[] n)
          Get the color values at the given index.
 void getNormals(float[] n)
          Retrieve the normals that are currently set.
 void getSecondaryColors(float[] cols)
          Retrieve the secondary colors that are currently set.
 void getSecondaryColors(int index, float[] cols)
          Retrieve the fog coordinates at the given index.
 void getTextureCoordinate(int index, int set, float[] coords)
          Retrieve the texture coordinates that are currently set.
 void getTextureCoordinates(float[][] coords)
          Retrieve the texture coordinates that are currently set.
 int getValidVertexCount()
          Get the number of vertices that are valid in the geometry arrays.
 boolean getVBOEnabled()
          Get whether Vertex Buffer Objects are used.
 int getVBOHint()
          Get how VBO's are optimized on the graphics card.
 void getVertex(int index, float[] coord)
          Get the vertex values at the given index.
 int getVertexType()
          Get the current vertex format type - 2D, 3D, or 4D.
 void getVertices(float[] vertices)
          Retrieve the vertices that are currently set.
protected  void initPolygonDetails(int numCoords)
          Initialize the internal arrays to a given size for the picking.
 boolean is2D()
          Check to see whether this shape is something that represents 2D or 3D geometry.
 boolean isMultiTextureAllowed()
          Convenience method to check if this code has detected the prescense of multitexture extensions.
protected  boolean isVisible()
          Check to see if this geometry is making the geometry visible or not.
 int numTextureUnits()
          Request the maximum number of texture units available on this hardware.
protected  boolean ray3DQuadChecked(float[] origin, float[] direction, float length, float[] dataOut)
          Private version of the ray - Polygon intersection test that does not do any bounds checking on arrays and assumes everything is correct.
protected  boolean ray3DTriangleChecked(float[] origin, float[] direction, float length, float[] dataOut)
          Private version of the ray - Polygon intersection test that does not do any bounds checking on arrays and assumes everything is correct.
protected  void recomputeBounds()
          Internal method to recalculate the implicit bounds of this Node.
 void setAttributes(int index, int size, byte[] attribs, boolean normalise, boolean signed)
          Set the attribute values at the given index to a new value.
 void setAttributes(int index, int size, double[] attribs, boolean normalise)
          Set the attribute values at the given index to a new value.
 void setAttributes(int index, int size, float[] attribs, boolean normalise)
          Set the attribute values at the given index to a new value.
 void setAttributes(int index, int size, int[] attribs, boolean normalise, boolean signed)
          Set the attribute values at the given index to a new value.
 void setAttributes(int index, int size, short[] attribs, boolean normalise, boolean signed)
          Set the attribute values at the given index to a new value.
 void setColors(boolean hasAlpha, float[] colors)
          Set the color array reference to the new array.
 void setFogCoordinates(float[] coords)
          Set the fog coordinate reference to the new array.
protected  void setLive(boolean state)
          Notification that this object is live now.
 void setNormals(float[] normals)
          Set the normal array reference to the new array.
 void setSecondaryColors(float[] colors)
          Set the secondary color reference to the new array.
 void setSingleColor(boolean hasAlpha, float[] color)
          Set a single color value to be used by all the vertices.
 void setTextureCoordinates(int[] types, float[][] texCoords)
          Replace all the texture array reference with the new array.
 void setTextureCoordinates(int[] types, float[][] texCoords, int numSets)
          Replace all the texture array reference to the new array.
 void setTextureCoordinates(int type, int textureSet, float[] texCoords)
          Set a single texture array reference to the new array.
 void setTextureSetMap(int[] set)
          Set the texture set map to the new mapping.
 void setTextureSetMap(int[] set, int numValid)
          Set the texture set map to the new mapping.
 void setValidVertexCount(int count)
          Set the number of vertices to the new number.
 void setVBOEnabled(boolean enabled)
          Set whether Vertex Buffer Objects are used.
 void setVBOHint(int hint)
          Set how VBO's are optimized on the graphics card.
protected  void setVertexState(javax.media.opengl.GL gl)
          Convenience method to pass everything to the rendering pipeline.
protected  void setVertexStateVBO(javax.media.opengl.GL gl)
          Handles state setting when VBOs are used.
 void setVertices(int type, float[] vertices)
          Set the vertex array reference to the new array.
 void setVertices(int type, float[] vertices, int numValid)
          Set the vertex array reference to the new array.
protected  void updateBounds()
          Update this node's bounds and then call the parent to update it's bounds.
 
Methods inherited from class org.j3d.aviatrix3d.Geometry
addParent, boundsChanged, checkPickMask, getBounds, getPickableBounds, getPickMask, getPickTargetType, hasTransparency, markBoundsDirty, pickBatch, pickLineRay, pickLineSegment, 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, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.j3d.aviatrix3d.rendering.GeometryRenderable
hasTransparency, render
 
Methods inherited from interface org.j3d.aviatrix3d.rendering.Renderable
equals
 
Methods inherited from interface java.lang.Comparable
compareTo
 

Field Detail

VBO_HINT_STREAM

public static final int VBO_HINT_STREAM
VBO Hint for Streamed geometry

See Also:
Constant Field Values

VBO_HINT_STATIC

public static final int VBO_HINT_STATIC
VBO Hint for Static geometry

See Also:
Constant Field Values

VBO_HINT_DYNAMIC

public static final int VBO_HINT_DYNAMIC
VBO Hint for Dynamic geometry

See Also:
Constant Field Values

COORDINATE_2

public static final int COORDINATE_2
2D Coordinate information is included in the vertex values

See Also:
Constant Field Values

COORDINATE_3

public static final int COORDINATE_3
3D Coordinate information is included in the vertex values

See Also:
Constant Field Values

COORDINATE_4

public static final int COORDINATE_4
4D Coordinate information is included in the vertex values

See Also:
Constant Field Values

COORDINATE_MASK

protected static final int COORDINATE_MASK
Mask to work out what coordinates are used

See Also:
Constant Field Values

COORDINATE_CLEAR

protected static final int COORDINATE_CLEAR
Mask to clear the coordinate setting

See Also:
Constant Field Values

NORMALS

protected static final int NORMALS
Normal information is included in the vertex values

See Also:
Constant Field Values

NORMAL_CLEAR

protected static final int NORMAL_CLEAR
Mask to clear the normal setting

See Also:
Constant Field Values

TEXTURE_MASK

protected static final int TEXTURE_MASK
Mask to work out if texture coordinates are used

See Also:
Constant Field Values

TEXTURE_CLEAR

protected static final int TEXTURE_CLEAR
Mask to clear the texture coordinate setting

See Also:
Constant Field Values

TEXTURE_COORDINATE_SINGLE

protected static final int TEXTURE_COORDINATE_SINGLE
Single set of texture coordinates are included in the vertex values

See Also:
Constant Field Values

TEXTURE_COORDINATE_MULTI

protected static final int TEXTURE_COORDINATE_MULTI
Multiple sets of texture coordinates are included in the vertex values

See Also:
Constant Field Values

TEXTURE_SET_AVAILABLE

protected static final int TEXTURE_SET_AVAILABLE
Has a valid texture set provided

See Also:
Constant Field Values

TEXTURE_SET_CLEAR

protected static final int TEXTURE_SET_CLEAR
Has a valid texture set provided

See Also:
Constant Field Values

COLOR_MASK

protected static final int COLOR_MASK
Mask to work out if colours are used

See Also:
Constant Field Values

COLOR_CLEAR

protected static final int COLOR_CLEAR
Mask to clear the per-vertex colour setting

See Also:
Constant Field Values

COLOR_3

protected static final int COLOR_3
RGB colour values are supplied in the data

See Also:
Constant Field Values

COLOR_4

protected static final int COLOR_4
RGBA colour values are supplied in the data

See Also:
Constant Field Values

COLOR_SINGLE

protected static final int COLOR_SINGLE
A single colour value is supplied in the data. This is used in combination with the COLOR_3 and COLOR_4 values.

See Also:
Constant Field Values

EDGE_MASK

protected static final int EDGE_MASK
Mask to work out if edge flags are used

See Also:
Constant Field Values

EDGE_CLEAR

protected static final int EDGE_CLEAR
Mask to clear the edge flag setting

See Also:
Constant Field Values

EDGES

protected static final int EDGES
Edge values are supplied in the data

See Also:
Constant Field Values

COLOR2_MASK

protected static final int COLOR2_MASK
Mask to work out if secondary colours are used

See Also:
Constant Field Values

COLOR2_CLEAR

protected static final int COLOR2_CLEAR
Mask to clear the per-vertex secondary colour setting

See Also:
Constant Field Values

COLOR2

protected static final int COLOR2
Secondary color values are supplied in the data

See Also:
Constant Field Values

FOG_MASK

protected static final int FOG_MASK
Mask to work out if fog coordinates are used

See Also:
Constant Field Values

FOG_CLEAR

protected static final int FOG_CLEAR
Mask to clear the fog coordinate setting

See Also:
Constant Field Values

FOG

protected static final int FOG
Fog coordinate values are supplied in the data

See Also:
Constant Field Values

ATTRIB_MASK

protected static final int ATTRIB_MASK
Mask to work out if shader vertex attributes are used

See Also:
Constant Field Values

ATTRIB_CLEAR

protected static final int ATTRIB_CLEAR
Mask to clear the shader vertex attributes setting

See Also:
Constant Field Values

ATTRIBS

protected static final int ATTRIBS
Edge values are shader vertex attributes in the data

See Also:
Constant Field Values

TEXTURE_COORDINATE_1

public static final int TEXTURE_COORDINATE_1
1D texture coordinates are included in the vertex values

See Also:
Constant Field Values

TEXTURE_COORDINATE_2

public static final int TEXTURE_COORDINATE_2
2D texture coordinates are included in the vertex values

See Also:
Constant Field Values

TEXTURE_COORDINATE_3

public static final int TEXTURE_COORDINATE_3
3D texture coordinates are included in the vertex values

See Also:
Constant Field Values

TEXTURE_COORDINATE_4

public static final int TEXTURE_COORDINATE_4
4D texture coordinates are included in the vertex values

See Also:
Constant Field Values

INTERSECT_COORDS

public static final int INTERSECT_COORDS
Bit mask to select vertex information to be returned.

See Also:
Constant Field Values

INTERSECT_COLOR

public static final int INTERSECT_COLOR
Bit mask to select colour information to be returned.

See Also:
Constant Field Values

INTERSECT_NORMAL

public static final int INTERSECT_NORMAL
Bit mask to select normal information to be returned.

See Also:
Constant Field Values

INTERSECT_TEXCOORDS_SINGLE

public static final int INTERSECT_TEXCOORDS_SINGLE
Bit mask to select the texture coordinates of just the first unit.

See Also:
Constant Field Values

INTERSECT_TEXCOORDS_MULTI

public static final int INTERSECT_TEXCOORDS_MULTI
Bit mask to select all texture coordinates of all units.

See Also:
Constant Field Values

INTERSECT_ALL

public static final int INTERSECT_ALL
Bit mask combining everything to return all information available

See Also:
Constant Field Values

hasMultiTextureAPI

protected static boolean hasMultiTextureAPI
Global flag to know if we are capable of rendering multitextures. This gets queried on the first time rendering is run and set appropriately. After that, if this is set to false, then any texture unit that has it's ID greater than 0 is just ignored.


maxTextureUnits

protected static int maxTextureUnits
Global flag indicating the maximum number of texture units the current hardware supports. This is queried at the same time as the multitexture API query. Initial value is set to 16.


wkPolygon

protected float[] wkPolygon
Working places for a single quad/triangle


vertexBuffer

protected java.nio.FloatBuffer vertexBuffer
Buffer for holding vertex data


colorBuffer

protected java.nio.FloatBuffer colorBuffer
Buffer for holding colour data


normalBuffer

protected java.nio.FloatBuffer normalBuffer
Buffer for holding normal data


fogBuffer

protected java.nio.FloatBuffer fogBuffer
Buffer for holding fog coordinate data


color2Buffer

protected java.nio.FloatBuffer color2Buffer
Buffer for holding secondary color data


textureBuffer

protected java.nio.FloatBuffer[] textureBuffer
Buffer for holding texture coordinate data


coordinates

protected float[] coordinates
Reference to the user array of coordinates used


numCoords

protected int numCoords
Number of valid entries in the coordinate array


numRequiredCoords

protected int numRequiredCoords
The number of coordinates actually required as defined by the geometry type. This will typically be less than numCoords as it takes into account the maximum index defined in indexed geometry.


normals

protected float[] normals
Reference to the user array of normals used


textures

protected float[][] textures
Reference to the user array of textures used, indexed by set


numTextureArrays

protected int numTextureArrays
The number of valid texture arrays in the textures variable


textureSets

protected int[] textureSets
The texture set map array that describes how to map the arrays


textureTypes

protected int[] textureTypes
Flags for the texture type for each array.


numTextureSets

protected int numTextureSets
The number of texture sets to use from the textureSet array


numRenderedTextureSets

protected int numRenderedTextureSets
Maximum number of renderable sets. This is the minimum of numTextureSets and maxTextureUnits. Anything more than this will be ignored by the implementation.


colors

protected float[] colors
Reference to the user array of colors used


color2s

protected float[] color2s
Reference to the user array of secondary colors used


fogCoords

protected float[] fogCoords
Reference to the user array of fog coordinates used


attribIds

protected int[] attribIds
Listing of the valid attribute IDs for rendering


attributes

protected org.j3d.util.IntHashMap attributes
Map of the attribute Ids to their data (ref to user array). Not allocated unless needed to save on memory footprint as this is a relatively rare usage - only when shaders are in use too.


vertexFormat

protected int vertexFormat
The format of the geometry used


vboQueryComplete

protected static boolean vboQueryComplete
Is the gl query for VBOs done?


vboAvailable

protected static boolean vboAvailable
Are VBO's available


useVbo

protected boolean useVbo
Should we use VBO's to store data


vboHint

protected int vboHint
How are VBO's going to be used


vboIdMap

protected java.util.HashMap<javax.media.opengl.GL,java.lang.Integer> vboIdMap
Map of VBO IDs. Only created if using VBO's


dataChanged

protected GLStateMap dataChanged
State map indicating sources have changed

Constructor Detail

VertexGeometry

protected VertexGeometry()
Constructs an instance with pre-defined values with default values.


VertexGeometry

protected VertexGeometry(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

isVisible

protected boolean isVisible()
Check to see if this geometry is making the geometry visible or not. Returns true if the defined number of coordinates is non-zero.

Overrides:
isVisible in class Geometry
Returns:
true when the geometry is visible

is2D

public boolean is2D()
Check to see whether this shape is something that represents 2D or 3D geometry. Pure 2D geometry is not effected by any EffectRenderable, while 3D is. Note that this can be changed depending on the type of geometry itself. A Shape3D node with an IndexedLineArray that only has 2D coordinates is as much a 2D geometry as a raster object.

Specified by:
is2D in class Geometry
Returns:
True if this is 2D geometry, false if this is 3D

updateBounds

protected void updateBounds()
Update this node's bounds and then call the parent to update it's bounds. Used to propogate bounds changes from the leaves of the tree to the root. A node implementation may decide when and where to tell the parent(s)s that updates are ready.

Overrides:
updateBounds in class Geometry

recomputeBounds

protected void recomputeBounds()
Internal method to recalculate the implicit bounds of this Node. By default the bounds are a point sphere, so derived classes should override this method with something better.

Specified by:
recomputeBounds in class Geometry

setLive

protected void setLive(boolean state)
Notification that this object is live now. Overridden to make sure that the live state of the nodes represents the same state as the parent scene graph.

Overrides:
setLive in class SceneGraphObject
Parameters:
state - true if this should be marked as live now

cleanup

public void cleanup(javax.media.opengl.GL gl)
Cleanup the object now for the given GL context.

Specified by:
cleanup in interface DeletableRenderable
Parameters:
gl - The gl context to draw with

getVertexType

public int getVertexType()
Get the current vertex format type - 2D, 3D, or 4D.

Returns:
The number of dimensions to the coordinates - 2D, 3D or 4D

getValidVertexCount

public int getValidVertexCount()
Get the number of vertices that are valid in the geometry arrays.

Returns:
a number >= 0

setValidVertexCount

public void setValidVertexCount(int count)
                         throws java.lang.IllegalArgumentException,
                                InvalidWriteTimingException
Set the number of vertices to the new number.

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

Parameters:
count - The new number, must be >= 0
Throws:
java.lang.IllegalArgumentException - The number is negative
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener bounds changed callback method

setVertices

public void setVertices(int type,
                        float[] vertices)
                 throws InvalidWriteTimingException
Set the vertex array reference to the new array. The number of valid items is taken to be the length of the array divided by three. This replaces the existing vertex list array reference with the new reference.

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

Parameters:
type - The number of dimensions to the coordinates - 2D, 3D or 4D
vertices - The new array reference to use for vertex information
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener bounds changed callback method

getVertices

public void getVertices(float[] vertices)
Retrieve the vertices that are currently set. The array must be at least as long as the valid vertex count, times 3. If none are set currently or have been cleared, the provided array is untouched.

Parameters:
vertices - The array to copy the values into
Throws:
java.lang.ArrayIndexOutOfBoundsException - The provided array is too short

getVertex

public void getVertex(int index,
                      float[] coord)
Get the vertex values at the given index. The passed in array should be at least as long as the coordinate size that this geometry represents.

Parameters:
index - The index of the coordinate to get
coord - The array to copy the coordinate value in to
Throws:
java.lang.ArrayIndexOutOfBoundsException - If the coord array is not big enough for the coordinate dimensions

setVertices

public void setVertices(int type,
                        float[] vertices,
                        int numValid)
                 throws java.lang.IllegalArgumentException,
                        InvalidWriteTimingException
Set the vertex array reference to the new array. The number of valid items is taken from the second parameter. This replaces the existing vertex list array reference with the new reference.

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

Parameters:
type - The number of dimensions to the coordinates - 2D, 3D or 4D
vertices - The new array reference to use for vertex information
numValid - The number of valid values to use in the array
Throws:
java.lang.IllegalArgumentException - The number is negative
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener bounds changed callback method

setSingleColor

public void setSingleColor(boolean hasAlpha,
                           float[] color)
                    throws java.lang.IllegalArgumentException,
                           InvalidWriteTimingException
Set a single color value to be used by all the vertices. This replaces the existing vertex list array reference with the new reference to a single value. Setting a value of null will clear all colour information, leaving no default vertex colouring.

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

Parameters:
hasAlpha - true if this is 4 component colour, false for 3 component
color - The new colour array
Throws:
java.lang.IllegalArgumentException - The length of the colors array is less than the number of declared vertices
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method

setColors

public void setColors(boolean hasAlpha,
                      float[] colors)
               throws java.lang.IllegalArgumentException,
                      InvalidWriteTimingException
Set the color array reference to the new array. The number of valid items is taken to be the length of the array divided by three. This replaces the existing vertex list array reference with the new reference. If a single colour was previously set, then it is removed and replaced with the per-vertex colours. Setting a value of null will clear all colour information, leaving no default vertex colouring.

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

Parameters:
hasAlpha - true if this is 4 component colour, false for 3 component
colors - The new array reference to use for color information
Throws:
java.lang.IllegalArgumentException - The length of the colors array is less than the number of declared vertices
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method

getColors

public void getColors(float[] col)
Retrieve the colours that are currently set. The array must be at least as long as the valid vertex count, times 3 or 4, depending on whether alpha values are currently set. If none are set currently or have been cleared, the provided array is untouched.

Parameters:
col - The array to copy the values into
Throws:
java.lang.ArrayIndexOutOfBoundsException - The provided array is too short

getColor

public void getColor(int index,
                     float[] color)
Get the color values at the given index. The passed in array should be at least as long as the color size that this geometry represents. If a single colour is used, then that single colour is always returned.

Parameters:
index - The index of the coordinate to get
color - The array to copy the color value in to
Throws:
java.lang.ArrayIndexOutOfBoundsException - If the coord array is not big enough for the coordinate dimensions

setNormals

public void setNormals(float[] normals)
                throws java.lang.IllegalArgumentException,
                       InvalidWriteTimingException
Set the normal array reference to the new array. The number of valid items is taken to be the length of the array divided by three. This replaces the existing normal list array reference with the new reference.

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

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

getNormals

public void getNormals(float[] n)
Retrieve the normals that are currently set. The array must be at least as long as the valid vertex count, times 3. If none are set currently or have been cleared, the provided array is untouched.

Parameters:
n - The array to copy the values into
Throws:
java.lang.ArrayIndexOutOfBoundsException - The provided array is too short

getNormal

public void getNormal(int index,
                      float[] n)
Get the color values at the given index. The passed in array should be at least as long as the color size that this geometry represents. If a single colour is used, then that single colour is always returned.

Parameters:
index - The index of the coordinate to get
n - The array to copy the normal value in to
Throws:
java.lang.ArrayIndexOutOfBoundsException - If the normal array is not big enough

setTextureSetMap

public void setTextureSetMap(int[] set)
                      throws InvalidWriteTimingException
Set the texture set map to the new mapping. The number of sets defined is the length of the array.

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

Parameters:
set - The new set to use
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method

setTextureSetMap

public void setTextureSetMap(int[] set,
                             int numValid)
                      throws InvalidWriteTimingException
Set the texture set map to the new mapping. The number of sets defined is the numValid parameter.

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

Parameters:
set - The new set to use
numValid - The length of the set to use
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method

setTextureCoordinates

public void setTextureCoordinates(int type,
                                  int textureSet,
                                  float[] texCoords)
                           throws java.lang.IllegalArgumentException,
                                  InvalidWriteTimingException
Set a single texture array reference to the new array. The number of valid items is taken to be the length of the array divided by three. This replaces the existing tex coord list array reference with the new reference.

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

Parameters:
type - The texture type - 1D, 2D, 3D, 4D.
textureSet - The set to update with these arrays
texCoords - The new array reference to use for vertex information
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method
java.lang.IllegalArgumentException

setTextureCoordinates

public void setTextureCoordinates(int[] types,
                                  float[][] texCoords)
                           throws java.lang.IllegalArgumentException,
                                  InvalidWriteTimingException
Replace all the texture array reference with the new array. The number of valid items is taken to be the length of the array divided by the vertex format defined for this instance. This replaces the existing tex coord list array reference with the new reference.

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

Parameters:
types - The sets of texture coordinate types that match each array
texCoords - The new array reference to use for vertex information
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method
java.lang.IllegalArgumentException

setTextureCoordinates

public void setTextureCoordinates(int[] types,
                                  float[][] texCoords,
                                  int numSets)
                           throws java.lang.IllegalArgumentException,
                                  InvalidWriteTimingException
Replace all the texture array reference to the new array. The number of valid texture coordinates is taken from the numValid parameter. The number of available sets is defined by numSets parameter.

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

Parameters:
types - The sets of texture coordinate types that match each array
texCoords - The new array reference to use for vertex information
numSets - The number of texture sets that are valid
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method
java.lang.IllegalArgumentException

getTextureCoordinates

public void getTextureCoordinates(float[][] coords)
Retrieve the texture coordinates that are currently set. The array must be at least as long as the valid vertex count, times 3. If none are set currently or have been cleared, the provided array is untouched.

Parameters:
coords - The array to copy the values into
Throws:
java.lang.ArrayIndexOutOfBoundsException - The provided array is too short

getTextureCoordinate

public void getTextureCoordinate(int index,
                                 int set,
                                 float[] coords)
Retrieve the texture coordinates that are currently set. The array must be at least as long as the valid vertex count, times 3. If none are set currently or have been cleared, the provided array is untouched.

Parameters:
coords - The array to copy the values into
Throws:
java.lang.ArrayIndexOutOfBoundsException - The provided array is too short

setFogCoordinates

public void setFogCoordinates(float[] coords)
                       throws java.lang.IllegalArgumentException,
                              InvalidWriteTimingException
Set the fog coordinate reference to the new array. The number of valid items is taken to be the length of the array (there's only one coord per vertex). This replaces the existing fog coordinate array reference with the new reference. If set to null, will clear the use of fog coordinates. Setting this value will also cause the system to automatically make use of them rather than the fragment depth (it will inherently call glFogi(GL_FOG_COORDINATE_SOURCE, GL_FOG_COORDINATE) before setting these values and then clear it afterwards.

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

Parameters:
coords - The new array reference to use for z depth values
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method
java.lang.IllegalArgumentException

getFogCoordinates

public void getFogCoordinates(float[] fogs)
Retrieve the fog coordinates that are currently set. The array must be at least as long as the valid vertex count, times 3. If none are set currently or have been cleared, the provided array is untouched.

Parameters:
fogs - The array to copy the values into
Throws:
java.lang.ArrayIndexOutOfBoundsException - The provided array is too short

getFogCoordinates

public void getFogCoordinates(int index,
                              float[] fogs)
Retrieve the fog coordinates at the given index. The array must be at least length 3. If none are set currently or have been cleared, the provided array is untouched.

Parameters:
index - The index of the coordinate to get
fogs - The array to copy the fog coordinate value in to
Throws:
java.lang.ArrayIndexOutOfBoundsException - If the normal array is not big enough

setSecondaryColors

public void setSecondaryColors(float[] colors)
                        throws java.lang.IllegalArgumentException,
                               InvalidWriteTimingException
Set the secondary color reference to the new array. The number of valid items is taken to be the length of the array divided by three as secondary color values cannot have an alpha value specified. This replaces the existing secondary color array reference with the new reference.

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

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

getSecondaryColors

public void getSecondaryColors(float[] cols)
Retrieve the secondary colors that are currently set. The array must be at least as long as the valid vertex count, times 3. If none are set currently or have been cleared, the provided array is untouched.

Parameters:
cols - The array to copy the values into
Throws:
java.lang.ArrayIndexOutOfBoundsException - The provided array is too short

getSecondaryColors

public void getSecondaryColors(int index,
                               float[] cols)
Retrieve the fog coordinates at the given index. The array must be at least length 3. If none are set currently or have been cleared, the provided array is untouched.

Parameters:
index - The index of the coordinate to get
cols - The array to copy the color value in to
Throws:
java.lang.ArrayIndexOutOfBoundsException - If the normal array is not big enough

setAttributes

public void setAttributes(int index,
                          int size,
                          float[] attribs,
                          boolean normalise)
                   throws java.lang.IllegalArgumentException,
                          InvalidWriteTimingException
Set the attribute values at the given index to a new value. The array provided must have a length of the number of coordinates times the size. Setting a size of -1 means to clear this attribute index from being used in future geometry updates. The size parameter must be one of -1, 1, 2, 3 or 4.

No checks are made on the index value and it is assumed the user provides valid values for this after binding the index in the ShaderProgram class.

Note: If the index provided is zero, then this attribute will replace the vertex values (eg a glVertex() call) with the attribute value, as per the OpenGL specification.

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

Parameters:
index - The attribute index to set these values for
size - The number of components: -1, 1, 2, 3 or 4
attribs - The new array reference to use for attribute information
normalise - true if the values should be normalised [-1.0, 1.0]
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method
java.lang.IllegalArgumentException

setAttributes

public void setAttributes(int index,
                          int size,
                          double[] attribs,
                          boolean normalise)
                   throws java.lang.IllegalArgumentException,
                          InvalidWriteTimingException
Set the attribute values at the given index to a new value. The array provided must have a length of the number of coordinates times the size. Setting a size of -1 means to clear this attribute index from being used in future geometry updates. The size parameter must be one of -1, 1, 2, 3 or 4.

No checks are made on the index value and it is assumed the user provides valid values for this after binding the index in the ShaderProgram class.

Note: If the index provided is zero, then this attribute will replace the vertex values (eg a glVertex() call) with the attribute value, as per the OpenGL specification.

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

Parameters:
index - The attribute index to set these values for
size - The number of components: -1, 1, 2, 3 or 4
attribs - The new array reference to use for attribute information
normalise - true if the values should be normalised [-1.0, 1.0]
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method
java.lang.IllegalArgumentException

setAttributes

public void setAttributes(int index,
                          int size,
                          int[] attribs,
                          boolean normalise,
                          boolean signed)
                   throws java.lang.IllegalArgumentException,
                          InvalidWriteTimingException
Set the attribute values at the given index to a new value. The array provided must have a length of the number of coordinates times the size. Setting a size of -1 means to clear this attribute index from being used in future geometry updates. The size parameter must be one of -1, 1, 2, 3 or 4.

No checks are made on the index value and it is assumed the user provides valid values for this after binding the index in the ShaderProgram class.

Note: If the index provided is zero, then this attribute will replace the vertex values (eg a glVertex() call) with the attribute value, as per the OpenGL specification.

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

Parameters:
index - The attribute index to set these values for
size - The number of components: -1, 1, 2, 3 or 4
attribs - The new array reference to use for attribute information
normalise - true if the values should be normalised [-1.0, 1.0]
signed - false if this is unsigned ints, true for signed values
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method
java.lang.IllegalArgumentException

setAttributes

public void setAttributes(int index,
                          int size,
                          short[] attribs,
                          boolean normalise,
                          boolean signed)
                   throws java.lang.IllegalArgumentException,
                          InvalidWriteTimingException
Set the attribute values at the given index to a new value. The array provided must have a length of the number of coordinates times the size. Setting a size of -1 means to clear this attribute index from being used in future geometry updates. The size parameter must be one of -1, 1, 2, 3 or 4.

No checks are made on the index value and it is assumed the user provides valid values for this after binding the index in the ShaderProgram class.

Note: If the index provided is zero, then this attribute will replace the vertex values (eg a glVertex() call) with the attribute value, as per the OpenGL specification.

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

Parameters:
index - The attribute index to set these values for
size - The number of components: -1, 1, 2, 3 or 4
attribs - The new array reference to use for attribute information
normalise - true if the values should be normalised [-1.0, 1.0]
signed - false if this is unsigned shorts, true for signed values
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method
java.lang.IllegalArgumentException

setAttributes

public void setAttributes(int index,
                          int size,
                          byte[] attribs,
                          boolean normalise,
                          boolean signed)
                   throws java.lang.IllegalArgumentException,
                          InvalidWriteTimingException
Set the attribute values at the given index to a new value. The array provided must have a length of the number of coordinates times the size. Setting a size of -1 means to clear this attribute index from being used in future geometry updates. The size parameter must be one of -1, 1, 2, 3 or 4.

No checks are made on the index value and it is assumed the user provides valid values for this after binding the index in the ShaderProgram class.

Note: If the index provided is zero, then this attribute will replace the vertex values (eg a glVertex() call) with the attribute value, as per the OpenGL specification.

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

Parameters:
index - The attribute index to set these values for
size - The number of components: -1, 1, 2, 3 or 4
attribs - The new array reference to use for attribute information
normalise - true if the values should be normalised [-1.0, 1.0]
signed - false if this is unsigned shorts, true for signed values
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method
java.lang.IllegalArgumentException

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.


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.


setVertexStateVBO

protected void setVertexStateVBO(javax.media.opengl.GL gl)
Handles state setting when VBOs are used. Called from setVertexState(GL gl) only!


setVertexState

protected final void setVertexState(javax.media.opengl.GL gl)
Convenience method to pass everything to the rendering pipeline. Will check for the various masks being set and only send the needed data. The only call not made here is the glDrawArrays() or equivalent.

Parameters:
gl - The gl context to draw with

clearVertexState

protected final void clearVertexState(javax.media.opengl.GL gl)
Convenience method to clear the previously set state in the rendering pipeline. Should be called just after the derived class calls glDrawArrays() or equivalent.

Parameters:
gl - The gl context to draw with

initPolygonDetails

protected void initPolygonDetails(int numCoords)
Initialize the internal arrays to a given size for the picking.

Parameters:
numCoords - The number of coordinates in the polygon

ray3DTriangleChecked

protected boolean ray3DTriangleChecked(float[] origin,
                                       float[] direction,
                                       float length,
                                       float[] dataOut)
Private version of the ray - Polygon intersection test that does not do any bounds checking on arrays and assumes everything is correct. Allows fast calls to this method for internal use as well as more expensive calls with checks for the public interfaces.

This method does not use wkPoint.

Parameters:
origin - The origin of the ray
direction - The direction of the ray
length - An optional length for to make the ray a segment. If the value is zero, it is ignored
dataOut - The intersection coordinates and more
Returns:
true if there was an intersection, false if not

ray3DQuadChecked

protected boolean ray3DQuadChecked(float[] origin,
                                   float[] direction,
                                   float length,
                                   float[] dataOut)
Private version of the ray - Polygon intersection test that does not do any bounds checking on arrays and assumes everything is correct. Allows fast calls to this method for internal use as well as more expensive calls with checks for the public interfaces.

This method does not use wkPoint.

Parameters:
origin - The origin of the ray
direction - The direction of the ray
length - An optional length for to make the ray a segment. If the value is zero, it is ignored
dataOut - The intersection coordinates and more
Returns:
true if there was an intersection, false if not

isMultiTextureAllowed

public boolean isMultiTextureAllowed()
Convenience method to check if this code has detected the prescense of multitexture extensions. If none are found, this will return null. However, one node instance has to have passed through the rendering cycle for this to have detected it. A better option would be to make use of the appropriate callbacks on the DrawableSurface APIs to detect before you get to this point.

Returns:
true if multitexture is allowed

numTextureUnits

public int numTextureUnits()
Request the maximum number of texture units available on this hardware. This is known after the first rendering process for any texture. Prior to this the value will be initialised to 16.

Returns:
A value greater than or equal to zero

setVBOEnabled

public void setVBOEnabled(boolean enabled)
                   throws InvalidWriteTimingException
Set whether Vertex Buffer Objects are used. This will only apply on graphics hardware that supports VBO's.

Parameters:
enabled - Should VBO's be used.
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method

getVBOEnabled

public boolean getVBOEnabled()
Get whether Vertex Buffer Objects are used. If VBO's are not supported this will return false.

Returns:
Should VBO's be used.

setVBOHint

public void setVBOHint(int hint)
                throws InvalidWriteTimingException
Set how VBO's are optimized on the graphics card. Valid values are VBO_HINT_*

Parameters:
hint - The hint
Throws:
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener data changed callback method

getVBOHint

public int getVBOHint()
Get how VBO's are optimized on the graphics card. Valid values are GL_STREAM_*,GL_STATIC_*, GL_DYNAMIC_*.

Returns:
The VBO hint

Aviatrix3D
2.1.0

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