Last modified 2 years ago Last modified on 04/01/13 21:01:03

nanoVIS protocol

For a current version of the protocol specification, see the Subversion repository: protocol-nanovis.txt

  • 3D surface plot
    • heightmap data visible <true|false> <volume IDs>
    • heightmap data follows <nbytes> <data>
    • heightmap linecontour visible <true|false> <volume IDs>
    • heightmap linecontour color <red> <green> <blue> <volume IDs>
    • heightmap tranfunc <transfer function name> <volume IDs>
    • heightmap cull <no/back/front>
    • heightmap polygon <wireframe/fill>
  • Flow
    • flow data follows <nbytes> <data>
    • flow vectorid <volume id>
    • flow reset
    • flow lic <boolean>
    • flow particle visible <on|off>
    • flow particle slice <x|y|z>
    • flow particle slicepos <pos>
    • flow capture <framecount> <filename.mpeg>
    • example)
      1. send a vector field 
         flow data follow <nbytes> <data>
         [Note] the data idendifiers are shared with volume data
      2. initialize the flow visualizer with the vector field id (volume id)
         flow vectorid <volume id>
      3. set the visibility of particle on/off
      4. set the visibility of lic on/off 
         4.1 set some properties of the lic slice 
      5. send capture command
         flow capture 100 filename.mpeg
      6. Send file data back to user as download
  • Axis
    • axis visible <false|true>
  • Grid
    • grid visible <false|true>
    • grid linecount <xCount> <yCount> <zCount>
    • grid axiscolor <red> <green> <blue>
    • grid linecolor <red> <green> <blue>
    • grid minmax <x1> <y1> <z1> <x2> <y2> <z2>
    • grid axisname <x|y|z> <name>
  • Volume
    • volume data shading isosurface on/off
      In order to get correct iso-surface rendering, the sequence below should be followed.
      1. Keep the current transfer function of the volume displayed 
      2. Change a transfer function which has the opacity value gaussian distributed curve shaped opacity.
         Below is the code fragment for computing opacitiy value.
          float sigma = 5.0f;
          float mean = exp(0.0f) / (sigma * sqrt(2.0f));
          float x;
          for (int i = 0; i < 256; ++i)
      	x = -150 + i;
      	opacity[i] = exp(- (x * x)/(2 * sigma * sigma)) / (sigma * sqrt(2.0f)) / mean;
              if (opacity[i] > 0.5)
                  opacity[i] = 1.0f;
      3. Send a commend : volume data shading isosurface on <volume ids>
      4. Send a commend : volume data shading isosurface off <volume ids> when the iso-surface rendering is not necessary any more
      5. Get the previous transfer function back.
    • volume animation
      • volume animation volumes <volume IDs>
      • volume animation start
      • volume animation stop
      • volume animation clear
      • volume animation capture <frame count>
      • Example
        1. Send a set of volume data
        2. Set volumes which is in the animation
           volume animation volumes <volume ids>
        3. Send a command for capturing the images
           volume animation capture <frame count>      


Wish List

  • Print command.
    • Instead of taking a snapshot of the current screen, re-render at 2400x2400. Send reply as nv>print command (so as not to be confused as an image to be displayed on the screen).
  • Heightmap
    • Be able to display wireframe on top of the filled polygons. I really want two settings: fill on/off, wireframe on/off.
    • For the wireframe, display the mesh the user sent in, instead of the mesh used by opengl.
    • Make the "transfunc" function work with the alpha map. Right now I can only set the color map of the transfer function.
    • Instead of culling back faces (i.e. making them invisible), draw the back faces darker than the front faces. If this is done, then we don't need a "cull" operation.
    • Display the grid at location related to the data, rather than a number of divisions between 0 and 1. This is completed for the heightmap. For volumes I need to add in the dx reader where the data limits are set. (gah).
    • Allow the grid lines to be translucent. Right now I can set an alpha value but the lines are not blended with the surface plot.
    • Allow the axes to be translucent. (This is a much lower priority wish than the previous one.)
    • The polygon shading model "flat" or "smooth" looks the same.
  • Flow
    • Do all the volume commands work with flows? Not all the commands, but some of them. I will put more commands for the flow visualization.
    • Is there a transfer function for the flow? It depends on the requirement. If the vector field should be displayed, then it needs.
    • Make rappture interface for flows (I've started building a flowvisviewer object in rappture --gah).
    • Play, pause, stop, rewind, fast forward of rough cut version of movie - 100 frames, start, end and a few in between.
    • Allow user to specify start frame and end frame of the movie.
    • Transfer MPEG movie back to user as for download.
  • Isosurfaces issues
    • DX data isn't available on the client side. This complicates the interface in that I have to be told by the nanovis server what the data limits are located. Derrick's Open DX reader should be the answer to this problem. The volumes should hold the data ranges. (gah)
    • Styles are set on a per-component (i.e. volume) basis. What does it mean if two volumes in the same plot use different transfer functions? (gah)
    • Make "All" work. Show only the active transfer function and markers. (gah)
      1. Non-foreground isosurfaces (i.e. surfaces not from the currently selected simulation) should be draw with 50% opacity ala molvisviewer.
      2. Add ability to select volumes to hide or remove.
      3. Need example of multi-volume simulation. They must use the same transfer function.
    • Finish work on markers.
      1. Select mode for marker.
      2. Arrow key bump value up/down.
      3. Number brings up dialog to edit value.
      4. Drag below legend, deletes marker.