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

时间:2017-07-25 15:38:08

标签: opengl opengl-es glsl

我正在尝试在GLSL着色器中实现自定义插值技术。

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

How to switch off default interpolation in OpenGL

在栅格化时,图像现在获得基于provoking vertex的图像。

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

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

2 个答案:

答案 0 :(得分:8)

插值被硬编码到OpenGL中。如果要进行自己的插值,则必须提供片段着色器:

  1. 该特定片段的重心坐标。这可以通过为三角形的三个顶点传递vec3(1, 0, 0)vec3(0, 1, 0)vec3(0, 0, 1)来完成。
  2. 您要插入的三角形数据的所有三个未插值值。这将需要FS中的3个flat输入变量(或3个输入的数组,这是相同的事情)。
  3. 当然,您需要将1, 0, 0三角形与三角形顶点的特定未解释值进行匹配。其他两个指数也是如此。

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

答案 1 :(得分:0)

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