Class Parallel3DRenderer<O extends NumberVector>

  • Type Parameters:
    O - Object type

    @Reference(authors="Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek",
               title="Interactive Data Mining with 3D-Parallel-Coordinate-Trees",
               booktitle="Proc. 2013 ACM Int. Conf. on Management of Data (SIGMOD 2013)",
               url="https://doi.org/10.1145/2463676.2463696",
               bibkey="DBLP:conf/sigmod/AchtertKSZ13")
    public class Parallel3DRenderer<O extends NumberVector>
    extends java.lang.Object
    Renderer for 3D parallel plots.

    The tricky part here is the vertex buffer layout. We are drawing lines, so we need two vertices for each macro edge (edge between axes in the plot). We furthermore need the following properties: we need to draw edges sorted by depth to allow alpha and smoothing to work, and we need to be able to have different colors for clusters. An efficient batch therefore will consist of one edge-color combination. The input data comes in color-object ordering, so we need to seek through the edges when writing the buffer.

    In total, we have 2 * obj.size * edges.size vertices.

    Where obj.size = sum(col.sizes)

    Reference:

    Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek:
    Interactive Data Mining with 3D-Parallel-Coordinate-Trees.
    Proc. 2013 ACM Int. Conf. on Management of Data (SIGMOD 2013)

    TODO: generalize to non-numeric features and scales.

    Since:
    0.6.0
    Author:
    Erich Schubert
    • Field Detail

      • LOG

        private static final Logging LOG
        Logging class.
      • textures

        private int[] textures
        Prerendered textures.
      • completedTextures

        private int completedTextures
        Number of completely rendered textures.
      • dindex

        private int[] dindex
        Depth indexes of axes.
      • colors

        float[] colors
        Color table.
      • vbi

        int[] vbi
        Vertex buffer.
      • frameBufferID

        int[] frameBufferID
        Framebuffer for render-to-texture
    • Method Detail

      • prepare

        protected int prepare​(javax.media.opengl.GL2 gl)
      • drawParallelPlot

        protected void drawParallelPlot​(javax.media.opengl.GLAutoDrawable drawable,
                                        javax.media.opengl.GL2 gl)
      • renderTexture

        void renderTexture​(javax.media.opengl.GL2 gl,
                           int edge)
      • prepareColors

        private void prepareColors​(StylingPolicy sp)
      • forgetTextures

        protected void forgetTextures​(javax.media.opengl.GL gl)
      • sortAxes

        private void sortAxes()
        Depth-sort the axes.
      • sortEdges

        private IntIntPair[] sortEdges​(int[] dindex)
        Sort the edges for rendering. FIXME: THIS STILL HAS ERRORS SOMETIME!
        Parameters:
        dindex - depth index of axes.
        Returns:
        Sorted array of (minaxis, edgeid)
      • renderLabels

        private void renderLabels​(javax.media.opengl.GL2 gl,
                                  IntIntPair[] edgesort)