IDLgrSurface with Gouraud shading appears asymmetric for symmetric data
Topic:
When using the VERT_COLORS property and setting SHADING=1 (Gouraud), the shading can be asymmetric accross individual quads in the IDLgrSurface. Typically, diagonal lines can be seen.
Discussion:
This is because the 3D renderer (OpenGL or MesaGL) will split the quad into 2 triangles diagonally across, and then calculate smooth shading for each triangle. Because the shading occurs for each triangle and not for the entire quad, the result can be asymmetric and unexpected in some cases where the dataset is small.
There is currently no way to control the way OpenGL or MesaGL performs shading in this case. However, there are some other ways to work around this issue.
1. Oversampling. The asymmetric rendering is less visible when the surface contains more points. So, one solution is to oversample the original dataset until the effects are not visible. Use CONGRID or REBIN to create a larger dataset to pass to the IDLgrSurface object.
2. Texture Mapping. Instead of using VERT_COLORS and SHADING=1, one could use a texture map and bilinear interpolation between pixels in the texture map. This will use a different interpolation algorithm and will be more symmetric.