我的渲染是沿着这两个垂直四边形的边缘排出像素(红色点)。
我正在使用:
GL_NEAREST
min / max纹理过滤。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减去)和不同的值,没有一个工作。我不知道自己错过了什么;我不认为这是一个丁字裤问题,因为流血的像素颜色来自纹理(而不是背景)。
答案 0 :(得分:3)
只有减去或添加半个纹素偏移量才能解决问题,因为你总是将问题放在一边。
您可以做的是将纹理坐标系在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;