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:
- Run visitconvert to make a 64 block BOV data set (I sent instructions earlier).
- 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.
- Modify databases/BOV/avtBOVFileFormat.C, avtBOVFileFormat::GetVar to put in a print statement for which domain is being read (cerr << "READING " << dom << endl;).
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
- cd visit090422/src/plots
- tar xvf RayTracer.tar
- cd RayTracer
- ../../bin/xml2makefile RayTracer.xml
- 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.