Ray tracing

It looks like you are not on svn.nersc.gov yet (not sure why), so I put a tarball on ranger so you can access the latest and greatest. /scratch/00382/tg456630/visit090422.tar.gz

Some misc. changes outside of the ray tracing code to get started:

  1. Run visitconvert to make a 64 block BOV data set (I sent instructions earlier).
  2. Modify the BOV reader.
    • Modify databases/BOV/avtBOVFileFormat.C, avtBOVFileFormat::GetVar to put in a print statement for which domain is being read (cerr << "READING " << dom << endl;).
      • This will help you see what data is being loaded.
    • Modify avtBOVFileFormat::PopulateDatabaseMetaData so that the line "if (!avtDatabase::OnlyServeUpMetaData() && nbricks > 1)" becomes "if (0)"
      • If not, then VisIt will want to create ghost zones, and that will prevent on demand processing.

Problems and notes with the current implementation:

  • I copied the volume plot as my starting point. There are probably some oddities inherited from that. Nothing serious (to my knowledge).
  • I haven't brought over the Qt window, so the interface basically doesn't work. (You can't edit the transfer function.)
  • In my email, I attached source code for RayTracer.tar
    1. cd visit090422/src/plots
    2. tar xvf RayTracer.tar
    3. cd RayTracer
    4. ../../bin/xml2makefile RayTracer.xml
    5. make
  • To run it, just open up the BOV file and make a RayTracer plot. You will get an empty image, but it will draw a diagonal line.
  • There is a method called avtRayTracerFilter::OnDemandProcessing. If it is true, then it loads data on demand. If false, then all of the data is loaded at once.
    • "load on demand" is the only one that "works", where "works" means there is a skeleton.
  • The ray tracing is done in either RenderImageOnDemand or RenderImageNotOnDemand.
  • In RenderImageOnDemand:
    • There is a lame attempt at ray tracing a single ray.
    • There is a method to say for pixel X, Y, what is the corresponding ray. It doesn't work.
    • Then there is something that does work. We look at a data structure to see what domains that ray intersects. Then we load those domains one at a time.
    • Then we should find the intersections with that domain and the ray. But it doesn't do anything.
    • If we had the intersections, then we could use the transfer function to cast rays. Again, nothing implemented
    • Then it modifies the output image to show how it is done. It draws a diagonal line.

So there's a LOT of work still to do. I just wanted to get something handed off, since I am taking so long here.