Aviatrix3D
2.1.0

org.j3d.aviatrix3d.pipeline.graphics
Class TransparencyDepthSortStage

java.lang.Object
  extended by org.j3d.aviatrix3d.pipeline.graphics.BaseSortStage
      extended by org.j3d.aviatrix3d.pipeline.graphics.TransparencyDepthSortStage
All Implemented Interfaces:
GraphicsSortStage

public class TransparencyDepthSortStage
extends BaseSortStage

Implementation of the sort stage that separates out the transparent and non transparent objects, and then arranges them using depth sorting.

The depth sorting algorithm used is to first assemble all the transparen objects into a list. Calculate their distance from the screen using the center of the bounds as the world space position. Normalise the depth to an integer between 0 and 32K (16bit depth buffer equivalent) where 0 is the near clipping plane and 32K is the far clipping plane. With the distance values, perform a counting-sort operation to sort the objects into the correct order with deepest first.

Version:
$Revision: 3.13 $
Author:
Justin Couch

Field Summary
 
Fields inherited from class org.j3d.aviatrix3d.pipeline.graphics.BaseSortStage
commandList, errorReporter, instructionMap, lastGlobalId, LIST_START_SIZE, terminate
 
Constructor Summary
TransparencyDepthSortStage()
          Create an empty sorting stage that assumes just a single renderable output.
TransparencyDepthSortStage(int numSurfaces)
          Create an empty sorting stage that initialises the internal structures to assume that there is a minumum number of surfaces, both on and offscreen.
TransparencyDepthSortStage(int numSurfaces, int depthBits)
          Create an empty sorting stage that initialises the internal structures to assume that there is a minumum number of surfaces, both on and offscreen.
 
Method Summary
protected  int estimateInstructionSize(MultipassRenderBucket scene)
          Estimate the required size of the instruction list needed for this scene to be processed.
protected  int estimateInstructionSize(SceneRenderBucket scene)
          Estimate the required size of the instruction list needed for this scene to be processed.
protected  int sort2DNodes(GraphicsCullOutputDetails[] nodes, int numNodes, GraphicsEnvironmentData data, GraphicsInstructions instr, int instrCount)
          Sort a single set of nodes into the output details of a single layer of a single viewport and place in the provided GraphicsInstructions instance.
protected  int sortNodes(GraphicsCullOutputDetails[] nodes, int numNodes, GraphicsEnvironmentData data, GraphicsInstructions instr, int instrCount)
          Sort a single set of nodes into the output details of a single layer of a single viewport and place in the provided GraphicsInstructions instance.
 
Methods inherited from class org.j3d.aviatrix3d.pipeline.graphics.BaseSortStage
halt, realloc, setErrorReporter, setSortedGeometryReceiver, sort
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TransparencyDepthSortStage

public TransparencyDepthSortStage()
Create an empty sorting stage that assumes just a single renderable output. The default list size is 1 and the number of depth bits is 16.


TransparencyDepthSortStage

public TransparencyDepthSortStage(int numSurfaces)
Create an empty sorting stage that initialises the internal structures to assume that there is a minumum number of surfaces, both on and offscreen. The number of depth bits is set to 16.

Parameters:
numSurfaces - The number of surfaces to start the internal lists sizes at.

TransparencyDepthSortStage

public TransparencyDepthSortStage(int numSurfaces,
                                  int depthBits)
Create an empty sorting stage that initialises the internal structures to assume that there is a minumum number of surfaces, both on and offscreen.

Parameters:
numSurfaces - The number of surfaces to start the internal lists sizes at.
depthBits - The number of bits of depth precision to quantize the depth sorting to
Throws:
java.lang.IllegalArgumentException - Depth bits is zero or negative
Method Detail

sortNodes

protected int sortNodes(GraphicsCullOutputDetails[] nodes,
                        int numNodes,
                        GraphicsEnvironmentData data,
                        GraphicsInstructions instr,
                        int instrCount)
Sort a single set of nodes into the output details of a single layer of a single viewport and place in the provided GraphicsInstructions instance. The implementation of this method should only concern itself with this set of nodes and not worry about dealing with nested scenes or other viewports.

Specified by:
sortNodes in class BaseSortStage
Parameters:
nodes - The list of nodes to perform sorting on
numNodes - The number of valid items in the nodes array
instr - Instruction instant to put the details into
instrCount - Offset of current number of valid instructions
data - The environment data used during sorting
Returns:
The current instruction count after sorting

sort2DNodes

protected int sort2DNodes(GraphicsCullOutputDetails[] nodes,
                          int numNodes,
                          GraphicsEnvironmentData data,
                          GraphicsInstructions instr,
                          int instrCount)
Sort a single set of nodes into the output details of a single layer of a single viewport and place in the provided GraphicsInstructions instance. The implementation of this method should only concern itself with this set of nodes and not worry about dealing with nested scenes or other viewports.

Specified by:
sort2DNodes in class BaseSortStage
Parameters:
nodes - The list of nodes to perform sorting on
numNodes - The number of valid items in the nodes array
instr - Instruction instant to put the details into
instrCount - Offset of current number of valid instructions
data - The environment data used during sorting
Returns:
The current instruction count after sorting

estimateInstructionSize

protected int estimateInstructionSize(SceneRenderBucket scene)
Estimate the required size of the instruction list needed for this scene to be processed. This is an initial rough estimate that will be used to make sure the arrays are at least big enough to start with. There is no issue if this underestimates, as most sorting will continually check and resize as needed. However, each resize is costly, so the closer this can be to estimating the real size, the better for performance.

Specified by:
estimateInstructionSize in class BaseSortStage
Parameters:
scene - The scene bucket to use for the source
Returns:
A greater than zero value

estimateInstructionSize

protected int estimateInstructionSize(MultipassRenderBucket scene)
Estimate the required size of the instruction list needed for this scene to be processed. This is an initial rough estimate that will be used to make sure the arrays are at least big enough to start with. There is no issue if this underestimates, as most sorting will continually check and resize as needed. However, each resize is costly, so the closer this can be to estimating the real size, the better for performance.

Specified by:
estimateInstructionSize in class BaseSortStage
Parameters:
scene - The scene bucket to use for the source
Returns:
A greater than zero value

Aviatrix3D
2.1.0

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