Use of Tessellation Shader in VTK

I have a triangular mesh(polygons as cells in vtkPolyData). Each point has
different scalar value. There is a lookup table for coloring based on scalars. On using Point Color data as scalars, triangles
have graded color. But, what I want is like in the image below .

I know that subdividing the triangular mesh into triangles having same
color data vertices can give result like this by using Cell data as scalars.

Now, our workflow is similar to example;a=blob;f=Examples/VisualizationAlgorithms/Cxx/FilledContours.cxx
and I have the desired output. Meshes we deal with have 10s of millions of
triangles and the process is quite slow.

I recenlty read about Tessellation Shaders at here , and they
mentioned about “Primitive Generator” part of Tessellation where we can just
mention the tessellation levels of each triangle by gl_TessLevelOuter and
gl_TessLevelInner. I believe, specifying gl_TessLevelOuter for every
triangle of original mesh based on Vertices Scalar values for all
triangles solves my problem with performance.

Can anybody please let me know how to do this in VTK?

As noted by @Dave_DeMarle on the mailing list, VTK only provides support for vertex, geometry, and fragment shaders at this time.

You might be able to get a similar look if you disable color interpolation across the triangles. If you pass your own per-vertex color information into the shader pipeline, you can disable interpolation by declaring the variable with the flat qualifier. There is some useful information in this Stack Overflow post. I haven’t actually tried this approach, but it might be worth a shot.

Thank you for the response.

The problem is solved now. I have used the in-built function itslef. Colors are actually generated from scalar values of vertices from a lookup table of color bar. Without dividing into triangles, I am using InterpolateScalarsBeforeMappingOn() as explained here and it’s working perfectly.

That’s a much better solution. Glad you got it working.

1 Like