|
j3d.org Aviatrix3D | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.j3d.aviatrix3d.SceneGraphObject
org.j3d.aviatrix3d.NodeComponent
org.j3d.aviatrix3d.Geometry
org.j3d.aviatrix3d.VertexGeometry
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.
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.
Field Summary | |
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 |
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 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 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 |
numTextureArrays
The number of valid texture arrays in the textures variable |
protected int |
numTextureSets
List of offsets into the texture array /** 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 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, lastParentList, parentList, pickFlags, validAlpha |
Fields inherited from class org.j3d.aviatrix3d.NodeComponent |
liveCount |
Fields inherited from class org.j3d.aviatrix3d.SceneGraphObject |
alive, updateHandler, WRITE_TIMING_MSG |
Fields inherited from interface org.j3d.aviatrix3d.PickableObject |
COLLIDABLE_OBJECT, GENERAL_OBJECT, PROXIMITY_OBJECT, VISIBLE_OBJECT |
Constructor Summary | |
protected |
VertexGeometry()
Constructs an instance with pre-defined values with default values. |
Method Summary | |
int |
getValidVertexCount()
Get the number of vertices that are valid in the geometry arrays. |
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. |
protected void |
markBoundsDirty()
Mark this node as having dirty bounds due to it's geometry having changed. |
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 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 |
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 |
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 |
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, getBounds, getPickMask, hasTransparency, pickBatch, pickSingle, removeParent, setBounds, setPickMask |
Methods inherited from class org.j3d.aviatrix3d.NodeComponent |
addParent, getParents, hasChanged, numParents, removeParent, renderState, restoreState |
Methods inherited from class org.j3d.aviatrix3d.SceneGraphObject |
checkForCyclicChild, checkForCyclicParent, dataChanged, getUserData, isLive, setUpdateHandler, setUserData |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public static final int COORDINATE_2
public static final int COORDINATE_3
public static final int COORDINATE_4
protected static final int COORDINATE_MASK
protected static final int COORDINATE_CLEAR
protected static final int NORMALS
protected static final int NORMAL_CLEAR
protected static final int TEXTURE_MASK
protected static final int TEXTURE_CLEAR
protected static final int TEXTURE_COORDINATE_SINGLE
protected static final int TEXTURE_COORDINATE_MULTI
protected static final int TEXTURE_SET_AVAILABLE
protected static final int TEXTURE_SET_CLEAR
protected static final int COLOR_MASK
protected static final int COLOR_CLEAR
protected static final int COLOR_3
protected static final int COLOR_4
protected static final int EDGE_MASK
protected static final int EDGE_CLEAR
protected static final int EDGES
protected static final int COLOR2_MASK
protected static final int COLOR2_CLEAR
protected static final int COLOR2
protected static final int FOG_MASK
protected static final int FOG_CLEAR
protected static final int FOG
public static final int TEXTURE_COORDINATE_1
public static final int TEXTURE_COORDINATE_2
public static final int TEXTURE_COORDINATE_3
public static final int TEXTURE_COORDINATE_4
protected float[] wkPolygon
protected java.nio.FloatBuffer vertexBuffer
protected java.nio.FloatBuffer colorBuffer
protected java.nio.FloatBuffer normalBuffer
protected java.nio.FloatBuffer fogBuffer
protected java.nio.FloatBuffer color2Buffer
protected java.nio.FloatBuffer[] textureBuffer
protected float[] coordinates
protected int numCoords
protected float[] normals
protected float[][] textures
protected int numTextureArrays
protected int[] textureSets
protected int[] textureTypes
protected int numTextureSets
protected float[] colors
protected float[] color2s
protected float[] fogCoords
protected int vertexFormat
Constructor Detail |
protected VertexGeometry()
Method Detail |
protected void setLive(boolean state)
setLive
in class SceneGraphObject
state
- true if this should be marked as live nowpublic int getVertexType()
public int getValidVertexCount()
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is livepublic void setValidVertexCount(int count) throws java.lang.IllegalStateException, java.lang.IllegalArgumentException, InvalidWriteTimingException
In a live scene graph, can only be called during the bounds changed callback.
count
- The new number, must be >= 0
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
java.lang.IllegalArgumentException
- The number is negative
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback methodpublic void setVertices(int type, float[] vertices) throws java.lang.IllegalStateException, InvalidWriteTimingException
In a live scene graph, can only be called during the bounds changed callback.
type
- The number of dimensions to the coordinates - 2D, 3D or 4Dvertices
- The new array reference to use for vertex information
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback methodpublic void getVertices(float[] vertices)
vertices
- The array to copy the values into
java.lang.ArrayIndexOutOfBoundsException
- The provided array is too shortpublic void setVertices(int type, float[] vertices, int numValid) throws java.lang.IllegalStateException, java.lang.IllegalArgumentException, InvalidWriteTimingException
In a live scene graph, can only be called during the bounds changed callback.
type
- The number of dimensions to the coordinates - 2D, 3D or 4Dvertices
- The new array reference to use for vertex informationnumValid
- The number of valid values to use in the array
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
java.lang.IllegalArgumentException
- The number is negative
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback methodpublic void setColors(boolean hasAlpha, float[] colors) throws java.lang.IllegalStateException, java.lang.IllegalArgumentException, InvalidWriteTimingException
In a live scene graph, can only be called during the data changed callback.
hasAlpha
- true if this is 4 component colour, false for 3 componentcolors
- The new array reference to use for color information
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
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 callback methodpublic void setNormals(float[] normals) throws java.lang.IllegalStateException, java.lang.IllegalArgumentException, InvalidWriteTimingException
In a live scene graph, can only be called during the data changed callback.
normals
- The new array reference to use for normal information
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback method
java.lang.IllegalArgumentException
public void setTextureSetMap(int[] set) throws java.lang.IllegalStateException, InvalidWriteTimingException
In a live scene graph, can only be called during the data changed callback.
set
- The new set to use
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback methodpublic void setTextureSetMap(int[] set, int numValid) throws java.lang.IllegalStateException, InvalidWriteTimingException
In a live scene graph, can only be called during the data changed callback.
set
- The new set to usenumValid
- The length of the set to use
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback methodpublic void setTextureCoordinates(int type, int textureSet, float[] texCoords) throws java.lang.IllegalStateException, java.lang.IllegalArgumentException, InvalidWriteTimingException
In a live scene graph, can only be called during the data changed callback.
type
- The texture type - 1D, 2D, 3D, 4D.textureSet
- The set to update with these arraystexCoords
- The new array reference to use for vertex information
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback method
java.lang.IllegalArgumentException
public void setTextureCoordinates(int[] types, float[][] texCoords) throws java.lang.IllegalStateException, java.lang.IllegalArgumentException, InvalidWriteTimingException
In a live scene graph, can only be called during the data changed callback.
types
- The sets of texture coordinate types that match each arraytexCoords
- The new array reference to use for vertex information
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback method
java.lang.IllegalArgumentException
public void setTextureCoordinates(int[] types, float[][] texCoords, int numSets) throws java.lang.IllegalStateException, java.lang.IllegalArgumentException, InvalidWriteTimingException
In a live scene graph, can only be called during the data changed callback.
types
- The sets of texture coordinate types that match each arraytexCoords
- The new array reference to use for vertex informationnumSets
- The number of texture sets that are valid
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback method
java.lang.IllegalArgumentException
public void setFogCoordinates(float[] coords) throws java.lang.IllegalStateException, java.lang.IllegalArgumentException, InvalidWriteTimingException
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.
coords
- The new array reference to use for z depth values
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback method
java.lang.IllegalArgumentException
public void setSecondaryColors(float[] colors) throws java.lang.IllegalStateException, java.lang.IllegalArgumentException, InvalidWriteTimingException
In a live scene graph, can only be called during the data changed callback.
colors
- The new array reference to use for secondary color
information
java.lang.IllegalStateException
- This call was not made during the update
callback if the node is live
InvalidWriteTimingException
- An attempt was made to write outside
of the NodeUpdateListener callback method
java.lang.IllegalArgumentException
protected void markBoundsDirty()
markBoundsDirty
in class Geometry
protected void updateBounds()
updateBounds
in class Geometry
protected void recomputeBounds()
recomputeBounds
in class Geometry
public boolean pickLineSegment(float[] start, float[] end, boolean findAny, float[] dataOut, int dataOutFlags) throws NotPickableException
pickLineSegment
in class Geometry
start
- The start point of the segmentend
- The end point of the segmentfindAny
- 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 polygondataOut
- An array to put the data in for the intersection. Exact
format is described by the flagsdataOutFlags
- A set of derived-class specific flags describing what
data should be included in the output array
NotPickableException
- This object has been marked as non pickable,
but you decided to try to call the method anywaypublic boolean pickLineRay(float[] origin, float[] direction, boolean findAny, float[] dataOut, int dataOutFlags) throws NotPickableException
pickLineRay
in class Geometry
origin
- The start point of the raydirection
- The direction vector of the rayfindAny
- 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 polygondataOut
- An array to put the data in for the intersection. Exact
format is described by the flagsdataOutFlags
- A set of derived-class specific flags describing what
data should be included in the output array
NotPickableException
- This object has been marked as non pickable,
but you decided to try to call the method anywayprotected void initPolygonDetails(int numCoords)
numCoords
- The number of coordinates in the polygonprotected boolean ray3DTriangleChecked(float[] origin, float[] direction, float length, float[] dataOut)
This method does not use wkPoint.
origin
- The origin of the raydirection
- The direction of the raylength
- An optional length for to make the ray a segment. If
the value is zero, it is ignoreddataOut
- The intersection coordinates and more
protected boolean ray3DQuadChecked(float[] origin, float[] direction, float length, float[] dataOut)
This method does not use wkPoint.
origin
- The origin of the raydirection
- The direction of the raylength
- An optional length for to make the ray a segment. If
the value is zero, it is ignoreddataOut
- The intersection coordinates and more
|
j3d.org Aviatrix3D | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |