我的渲染是沿着这两个垂直四边形的边缘排出像素(红色点)。
我正在使用:
GL_NEAREST
最小/最大纹理过滤。texture
函数在片段着色器上。s1 = 320.0f/1024.0f;
s2 = (320.0f+8.0f)/1024.0f;
t1 = 732.0f/1024.0f;
t2 = (732.0f+8.0f)/1024.0f;
渲染#2 :(用于计算纹素的明亮纹理,但红色像素仍然存在):
据我所知,OpenGL的texture
函数将在像素中心进行采样,但是当我尝试将“S,T”坐标偏移半个像素时,它(修复它)会产生不利影响。
例如,下面的纹理坐标会缩小沿精灵边框的纹素的宽度。
s1 = (0.5f+320.0f)/1024.0f;
s2 = (0.5f+320.0f+8.0f)/1024.0f;
t1 = (-0.5f+732.0f)/1024.0f;
t2 = (-0.5f+732.0f+8.0f)/1024.0f;
我尝试了一堆可能的S&T偏移组合(对S&T增加0.5,从两者中减去,增加到T但从S减去)和不同的值,没有一个工作。我不知道我错过了什么;我不认为这是一个丁字裤问题,因为出血的像素颜色来自纹理(而不是背景)。
只减去或添加半纹素偏移量永远不会解决问题,因为您始终将问题保留在一边。
您可以做的是将纹理坐标系在x + 0.5和x + width-0.5范围内,这样可以防止两侧出血。代码可能如下所示:
s = clamp(texCoord.x, 320 + 0.5, 320 + 8 - 0.5) / 1024;
t = clamp(texCoord.y, 732 + 0.5, 732 + 8 - 0.5) / 1024;