Pseudocolor rendering of nodal variables on quads
When rendering, OpenGL (hardware and software) drivers typically split quads into two triangles. As a result, in VisIt's Pseudocolor plots we don't always see the expect bilinear interpolation for nodal quantities rendered on a quads.
Here is an example of the two choices for subdivision: This first aligns with what we expect, and the second shows subdivision artifacts.
The automatic subdivision that OpenGL uses for quads out of our control.
Subdivide into smaller quads
To try to address this we created a "Subdivide Quads" Operator. In its current form this operator does not solve the problem, since it simply subdivides quads into smaller quads which can yield the same bad behaviour.
Here is an example:
Subdivide into 4 triangles
To get a better representation, you can subdivide such that the resulting triangle interpolations better match that expected quad bilinear interpolation:
This helps for some cases, but isn't a 100% solution.
The only proper way to tackle this problem is to create a fragment shader that does bi-linear interpolation on each triangle using the 4-points of the quad.
- For each quad emit two triangles
- Pass the 4 texture values, and missing vertex (4th) coordinates to a vertex shader.
- Project the 4th point just as the others
- Make sure the extra point arrives in the fragment shader some how.
- Implement bi-linear interpolation in the fragment shader.