我使用旧的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。
然而,我看到一篇论文,他们得到了不同的结果。
在这张图片上,他试图解释他是如何获得这些价值的。但我不明白。他做的事与我的做法非常相似,但我认为他确实摆脱了匹配带效应。
我得到的结果如下:
这是我使用Radiosity渲染得到的结果:
这是我用插值方法得到的结果:
它确实变得更加流畅,但我仍然拥有巨大的马赫乐队效果
答案 0 :(得分:1)
我不明白图8a想要完成什么,但你的实现对我来说听起来很合理。
您看到的瑕疵不是插值问题,而是由于您在平面上有低对比度颜色渐变这一事实。
例如,如果RGB颜色从(100,0,0)变为(110,0,0)超过100像素,则每十个像素在红色通道中的颜色变为1。由于场景非常简单,因此这些边缘会延伸到图像的较大部分。瞧,人脑非常善于发现它们。
可能唯一的方法是使用更复杂的场景,使用纹理或使用带有一些人为小噪音的fragement着色器。