如何在OpenGL中提供用于填充三角形的自定义插值技术

问题描述:

我想在GLSL着色器中实现自定义插值技术。如何在OpenGL中提供用于填充三角形的自定义插值技术

我已经使用flat插值说明符为我的纹理坐标关闭了默认的OpenGL双线性滤波器。我遵循的是在下面的链接中指定的技术:

How to switch off default interpolation in OpenGL

虽然光栅化,像现在得到它是基于provoking vertex的图像。

我可以引入插值机制来决定三角形顶点之间填充的颜色吗?或者是在OpenGL中硬编码?

我是GLSL世界的新手,因此会要求您提供一个非复杂的答案。

插值被硬编码到OpenGL中。如果你想做自己的插值,你必须提供片段着色器:

  1. 该特定片段的重心坐标。这可以通过传递三角形的三个顶点vec3(1, 0, 0),vec3(0, 1, 0)vec3(0, 0, 1)来完成。
  2. 您希望插入的三角形数据的所有三个非插值值。这将需要你的FS中的3个flat输入变量(或3个输入的数组,这是同样的事情)。

当然,您需要匹配1, 0, 0三角形与三角形顶点的特定未解释值。其他两个指数也是如此。

这基本上需要几何着色器,因为VS很难传递重心坐标或提供正确的非插值数据。但是,通过位置的重心坐标以及要插值的值,您应该可以实现您喜欢的任何插值方案。例如,#2可以包含3个以上的值。

+0

谢谢尼科尔。有没有任何链接可以提供有关此方法的更多详细信息? –

需要自定义插值函数的常用方法是对纹理坐标使用标准插值,并在纹理中查找任何想要的数据。