texelFetch 。
首先,如果我像下面这样设置四边形的角落:
(-1, 1)+-----------+(1,1)
| |
| |
| |
| |
| |
(-1,-1)+-----------+(1,-1)
并将它们对应的纹理坐标设置为:
(0,511)+-----------+(511,511)
| |
| |
| |
| |
| |
(0, 0)+-----------+(511,0)
我刚使用了以下片段着色器,尝试为其四个边界分配不同的颜色,却只显示了白屏:
#version 330
in vec2 fUV; // sent from vertex shader
out vec4 color;
void main() {
if (fUV.x == 0) // leftmost
color = vec4(1.0, 0.0, 0.0, 1.0);
else if (fUV.y == 0) // bottom
color = vec4(0.0, 1.0, 0.0, 1.0);
else if (fUV.x == 511) // rightmost
color = vec4(0.0, 0.0, 1.0, 1.0);
else if (fUV.y == 511) // top
color = vec4(1.0, 0.0, 1.0, 1.0);
else // otherwise
color = vec4(1.0, 1.0, 1.0, 1.0);
// check if uv equals an integer
if (fUV.y == 100)
color = vec4(0.0, 0.0, 0.0, 1.0);
}
这意味着所有的相等性测试都失败了。
其次,如果我对所有的 -1 坐标添加半像素宽度偏移量 d= 1.0 / 512
:
(-1+d, 1 )+-----------+(1,1)
| |
| |
| |
| |
| |
(-1+d,-1+d)+-----------+(1,-1+d)
在保持其他内容不变的情况下,我在屏幕上画出了最左边的红线。
我得到的结果真的很令人困惑。为什么只有最左边的列被绘制,而底部行没有呢?
我想知道如何绘制四边形并设置它们的坐标,以便我可以在像素和纹理元素之间建立一对一的映射。