【发布时间】:2019-12-02 01:42:58
【问题描述】:
我正在尝试在 OpenGL 中绘制一个带有纹理的矩形。我只是想渲染整个 .jpg 图像,所以我在顶点缓冲区中将纹理坐标指定为 [0, 0] 到 [1, 1]。我希望片段着色器中的所有插值纹理坐标都在 [0, 0] 和 [1, 1] 之间,但是,根据纹理绘制的位置,我有时会得到一个小于 0 的纹理坐标(我知道之所以如此,是因为如果 tex 坐标小于 0,我尝试从片段着色器输出红色)。
我怎么会得到一个超出指定范围的插值?我目前可视化顶点/片段,如下图 (https://learnopengl.com/Advanced-OpenGL/Anti-Aliasing):
如果我想象一个矩形,那么如果像素样本在矩形内,那么插值纹理坐标必须至少为 0,因为矩形的最左边代表 0,对吗?那么我如何得到小于 0 的值呢?
编辑:经过一些基本测试后,如果一个形状简单地与该像素相交,而不是如果像素采样点在该形状内,则看起来会调用片段着色器。我通过将矩形的开始放置在像素中间稍前和稍后来测试这一点 - 当稍稍落后于像素中间时,我没有得到负值,但如果我将它放在中间稍微之后,那么我确实得到了一个负值。这与我链接到的网站所说的相矛盾 - 也许它取决于驱动程序?
编辑:我之前做的测试是开启多重采样。如果我关闭多重采样,那么即使形状超过中间,我也不会得到负值......
【问题讨论】:
标签: opengl