你如何在OpenGL中进行非线性着色?

时间:2010-09-13 06:00:09

标签: opengl shader nonlinear-functions

我正在开发OpenGL中的可视化工具,以可视化3d有限元建模应用程序的输出。该应用程序使用四面体网格(但我只查看外部构面,即三角形)。输出是一个标量变量,我想映射到一个颜色映射(我已经知道如何做到这一点)。棘手的部分是每个单元格中变量的值由该单元格中坐标的多项式函数(我认为它是3阶,但尚未最终确定)给出。

在OpenGL中,如果我使用“平滑”着色模型,那么如果我创建一个多边形并给每个顶点一个不同的值,那么它将自动在顶点的值之间进行插值(线性)以获得颜色内部点的价值观。但是这只是在每个单元格中给出一个线性函数,我希望它是我指定的非线性函数。有没有办法做到这一点?

(当然,一种解决方案是通过将每个单元格绘制成一个小得多的OpenGL多边形的组合来“手动”进行插值,这些多边形足够小,每个单元的颜色变化不大。但我想知道如果OpenGL本身有解决方案。)

1 个答案:

答案 0 :(得分:7)

如果您有GLSL(or the time to learn it)的经验,可以使用像素着色器,或者将标量值渲染到纹理,并使用它来texture-map三角形。

如果使用着色器,您应该能够从三角形的顶点读取颜色值,并根据需要自行执行插值。

修改

我找到了一篇论文来处理这个确切的问题:http://mgarland.org/files/papers/perpixel.pdf