2

我正在尝试使用 openGL 中的纹理来进行并行计算(openCL 不是一个选项)。我知道从左下角开始,每个轴上的域是 0.0 到 1.0。但是,渲染过程中像素的坐标是映射到像素的左上角,还是像素的中间?

前任。如果我有一个 100x100px 的纹理。最左上角像素的坐标是(0.0,1.0)还是(0.005,0.995)?我以为是前者,但得到了一些意想不到的结果。我想知道我是否正在访问“像素边界”上的数据,并且 openGL 正在插入一个平均两个相邻像素的值。

4

2 回答 2

4

OpenGL 像素/片段在概念上是以半整数像素为中心的 1x1 正方形。OpenGL 4.5 规范指出:

片段位于其左下角,位于整数网格坐标上。光栅化操作还涉及片段的中心,该中心从其左下角偏移 (1/2,1/2)(因此位于半整数坐标上)。

所以对于 100x100 像素,纹素之间的水平距离是 1/100 = 0.01。因此左边缘和第一个纹素中心之间的距离是 0.01/2 = 0.005。

从左下角开始的第一个垂直纹素中心也是 0.005,所以从顶部开始,第一个纹素中心是 1.0 - 0.005 = 0.995。

这就是为什么你会得到这些数字。

您可以在此处查看我的帖子以获取更多详细信息(tex 坐标内容接近尾声)。

于 2014-08-24T02:35:36.790 回答
0

像素的中心其实是后者,即(0.005,0.995)。

GL_NEAREST正如 Nicol Bolas 在评论中提到的那样,您可以通过将过滤方法更改为创建纹理时来防止 opengl 跨像素插值。

于 2013-02-06T22:07:26.500 回答