如何在OpenGL中提供用于填充三角形的自定义插值技术
问题描述:
我想在GLSL着色器中实现自定义插值技术。如何在OpenGL中提供用于填充三角形的自定义插值技术
我已经使用flat
插值说明符为我的纹理坐标关闭了默认的OpenGL双线性滤波器。我遵循的是在下面的链接中指定的技术:
How to switch off default interpolation in OpenGL
虽然光栅化,像现在得到它是基于provoking vertex
的图像。
我可以引入插值机制来决定三角形顶点之间填充的颜色吗?或者是在OpenGL中硬编码?
我是GLSL世界的新手,因此会要求您提供一个非复杂的答案。
答
插值被硬编码到OpenGL中。如果你想做自己的插值,你必须提供片段着色器:
- 该特定片段的重心坐标。这可以通过传递三角形的三个顶点
vec3(1, 0, 0)
,vec3(0, 1, 0)
和vec3(0, 0, 1)
来完成。 - 您希望插入的三角形数据的所有三个非插值值。这将需要你的FS中的3个
flat
输入变量(或3个输入的数组,这是同样的事情)。
当然,您需要匹配1, 0, 0
三角形与三角形顶点的特定未解释值。其他两个指数也是如此。
这基本上需要几何着色器,因为VS很难传递重心坐标或提供正确的非插值数据。但是,通过位置的重心坐标以及要插值的值,您应该可以实现您喜欢的任何插值方案。例如,#2可以包含3个以上的值。
答
需要自定义插值函数的常用方法是对纹理坐标使用标准插值,并在纹理中查找任何想要的数据。
谢谢尼科尔。有没有任何链接可以提供有关此方法的更多详细信息? –