1

我创建了一个多纹理片段着色器,我想在其中翻转其中一个纹理,但是这样做时,我的纹理变得锯齿状。这个问题有解决方案吗?

锯齿状边框

这是我的片段着色器代码:

void main(void)
{
    lowp vec4 camera = texture2D(texture0, destinationTexCoord);
    lowp vec4 viewfinder = texture2D(texture1, vec2(destinationTexCoord.x, 1.0 - destinationTexCoord.y));

    lowp vec4 result = mix(camera, viewfinder, viewfinder.a);
    gl_FragColor = result;
}

我正在使用的纹理过滤:

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

一些背景信息:我在我的片段着色器中混合这些纹理(混合代码被剥离)所以我不是在寻找一个解决方案,我旋转第二个平面并将它们合并到帧缓冲区中。我想知道在我的片段着色器中翻转/旋转纹理坐标是否是个好主意。

最后,我将传递一个统一的说法:旋转或不旋转,从而导致一个纹理是否旋转。

4

1 回答 1

1

对 destinationTexCoord 使用 mediump 而不是 lowp 将提高 vec2(destinationTexCoord.x, 1.0 - destinationTexCoord.y) 计算的采样率。但是,我的建议是使用两个不同的 vec2,而不是使用依赖纹理读取。即cameraTexCoordviewfinderTexCoord。您可以避免在片段着色器中进行 mediump 计算,并利用硬件(希望)优化的垂直片段插值。

实际上没有理由将 lowp 用于纹理坐标,除非它们是相关的,在这种情况下,lowp 可能更适合片段着色器计算。否则,根据我的经验,lowp 并没有带来任何收益(虽然我只知道 iOS 上的 PowerVR 硬件)。

于 2012-08-30T18:33:30.437 回答