wow… 300x300x300 is 27 million instances. I don’t think you can render that at interactive frame rates and even if you could it would not be very informative. Perhaps you could take the average of a 10x10x10 block of elements and represent them as a single arrow? That would result in 30x30x30 is 27,000 arrows, which most GPU’s should have no problem rendering.
Ray casting is powerful, but slow. Having 27 million objects to check against each ray would bring the fastest system to its knees, unless you can optimize the search by culling (frustum, occlusion) or binning, which is something you’d do on the CPU. I personally wouldn’t go there, it could easily eat up all your time.
Not sure how an iso-surface could be used to render a scalar field, but that’s because I have limited experience with it. I know other Cinder users have successfully implemented metaballs, marching cubes and iso-surfaces, but I don’t think their code is open source or compatible with the current Cinder version.
And sorry for the confusion about scalar/vector fields… I suppose scalars are easier to depict: you could use a simple cube and vary its size (
float) or color (
vec3). That would be a bit easier than drawing arrows using quaternions. Use the mentioned sample as a starting point for that. Use a cube instead of a teapot and you’re halfway there.