用于光能传递的双线性插值

时间:2014-04-04 21:56:21

标签: opengl

我使用旧的GL_QUADS渲染开发了一个OpenGL项目,而不是使用着色器。

我想平均我的光能传递解决方案的颜色。我的脸上有很多补丁。我做了什么:

我平均脸部内相邻斑块的颜色。我取得了不错的成绩,但仍然获得了一些马赫效应。

我试着解释一下我做了什么:

//  ___________________ 
// |v3     v2|v3     v2|
// |         |         |
// |         |         |
// |    2    |    3    | 
// |         |         |
// |v0_____v1|v0_____v1|
// |v3     v2|v3     v2|
// |         |         |
// |         |         |
// |    0    |    1    |
// |         |         |
// |v0_____v1|v0_____v1|

每个补丁都有颜色。补丁0,补丁1,补丁2和补丁3.补丁的顶点与补丁颜色相同。然后我通过对相邻贴片的颜色求平均来改变顶点颜色。所以首先,我得到补丁0和1的颜色,将它们加在一起然后除以2,然后我将这个新颜色设置为补丁0的顶点1和补丁1的顶点0。

然而,我看到一篇论文,他们得到了不同的结果。

enter image description here

在这张图片上,他试图解释他是如何获得这些价值的。但我不明白。他做的事与我的做法非常相似,但我认为他确实摆脱了匹配带效应。

我得到的结果如下:

enter image description here

这是我使用Radiosity渲染得到的结果:

enter image description here

这是我用插值方法得到的结果:

enter image description here

它确实变得更加流畅,但我仍然拥有巨大的马赫乐队效果

1 个答案:

答案 0 :(得分:1)

我不明白图8a想要完成什么,但你的实现对我来说听起来很合理。

您看到的瑕疵不是插值问题,而是由于您在平面上有低对比度颜色渐变这一事实。

例如,如果RGB颜色从​​(100,0,0)变为(110,0,0)超过100像素,则每十个像素在红色通道中的颜色变为1。由于场景非常简单,因此这些边缘会延伸到图像的较大部分。瞧,人脑非常善于发现它们。

可能唯一的方法是使用更复杂的场景,使用纹理或使用带有一些人为小噪音的fragement着色器。