I’m struggling to understand both the Textbook and the User’s Guide PDFs, because my knowledge is very heavily 3D CG-focused (you know: mesh data, mesh animation, lighting/materials, etc), and while these two books of course treat 3D graphics concepts, they are considered like second-class citizens, with algorithms being the 1st-class citizen. This somehow makes me struggle to properly understand VTK.
Yes, I need algorithms, because for example I’m going to have scalar fields on a surface and I’m going to need to extract isocontours from them, or I’m going to need to render volumetric data, for example.
But however, in my mind, the 3D computer graphics data comes first. I mean: first I have the meshes, all the geometry that defines the model. Then I apply physical parameters to such geometry. Then I call my FEM analysis code. And later, as the last step in the pipeline, data algorithms are issued for visualization of the results. So, in my pipeline, 3D geometry is the 1st-class citizen, and algorithms are 2nd-class. I think this is what is making me struggle to understand VTK. Other subtleties like the difference between readers and importers make me find more difficulties (yes, I understand a reader reads the data into VTK objects, while the importer makes some sort of a blackbox hiding the actual data, but I don’t get the point on why readers cannot read textures and materials, because VTK does have classes for that).
The key concept here is that I want to directly attach my FEM analysis code to the VTK geometry data. I don’t want the data to be duplicated.
And obviously, many questions come to my mind: How should you create a 3D triangle (and quad) mesh in VTK? Should it be a vtkUnstructuredGrid? Or a vtkPolyData? Should it be a vtkPolyhedron if the mesh must be watertight, non-self intersecting, and manifold? And what class should it be if the mesh will be open instead? Does VTK have functions that can automatically check if a mesh meets the vtkPolyhedron requirements and thus construct a vtkPolyhedron from an arbitrary mesh? Can all these classes have texture coordinates assigned? And how do skinning and morphed mesh animation come into the figure? Can you apply skinning to a vtkPolyhedron? What if a skinning or morphing animation makes the vtkPolyhedron self-intersect? Can it be detected?
As you see, my mind is centered in geometry, geometry, geometry… and won’t consider any data field algorithms for visualization until geometry is clearly defined and established.
So, is there any other book, or tutorial, that could help me to learn VTK by going first into these topics, which are my first goals? (I first need to connect my FEM code to geometry data, and only later I’ll consider data visualization algorithms).