IndexedGeometryArray objects provide an extra level of indirection to avoid the redundant vertices. Arrays of vertex-based information must still be provided, but the vertices may be stored in any order, and any vertex may be reused during rendering. Additional arrays (index arrays) that contain indices are provided to index into the data arrays.

To illustrate the usage of IndexedGeometryArray a program creating a Cube with IndexedQuadArray is written here.

 public class IndexedCube extends JFrame {
  public IndexedCube() {
    ...
  }

  public BranchGroup createSceneGraph() {
    BranchGroup objRoot = new BranchGroup();

    ...
    
    objRoot.addChild(new Shape3D(createGeometry()));

    ...

    return objRoot;
  }
  
  private Geometry createGeometry(){
    // Prepare the coordinates
    Point3f[] coords={
        new Point3f(-0.2f,0.2f,-0.2f),
        new Point3f(-0.2f,-0.2f,-0.2f),
        new Point3f(0.2f,-0.2f,-0.2f),
        new Point3f(0.2f,0.2f,-0.2f),
        new Point3f(-0.2f,0.2f,0.2f),
        new Point3f(-0.2f,-0.2f,0.2f),
        new Point3f(0.2f,-0.2f,0.2f),
        new Point3f(0.2f,0.2f,0.2f)
    };
    // Prepare the indices
    int[] indices={
        0,3,3,2,2,1,
        3,7,7,6,6,2,
        7,4,4,5,5,6,
        4,0,5,1,1,0,
    };
    IndexedLineArray lineArray=new IndexedLineArray(coords.length,
        IndexedQuadArray.COORDINATES,indices.length);
    lineArray.setCoordinates(0,coords);
    lineArray.setCoordinateIndices(0,indices);
    
    return lineArray;
  }
  
  public static void main(String[] args){
    ...
  }
}