我正在尝试使用 openGL 中的纹理进行并行计算(openCL 不是一个选项)。据我所知,从左下角起每个轴上的域是 0.0 到 1.0。但是,渲染时像素点的坐标是映射到像素点的左上角,还是像素点的中间呢?
例如。如果我有一个 100x100px 的纹理。最左上角像素的坐标是(0.0,1.0)还是(0.005,0.995)?我以为是前者,但得到了一些意想不到的结果。我想知道我是否正在访问“像素边界”上的数据,并且 openGL 是否正在插值到两个相邻像素的平均值。
最佳答案
OpenGL 像素/片段在概念上是以半整数像素为中心的 1x1 正方形。 OpenGL 4.5 规范指出:
A fragment is located by its lower left corner, which lies on integer grid coordinates. Rasterization operations also refer to a fragment’s center, which is offset by (1/2,1/2) from its lower left corner (and so lies on half-integer coordinates).
因此,对于 100x100 像素,纹素之间的水平距离为 1/100 = 0.01。因此,左边缘与第一个纹理元素中心之间的距离为 0.01/2 = 0.005。
从左下角开始的第一个垂直纹理元素中心也是 0.005,因此从顶部开始第一个纹理元素中心是 1.0 - 0.005 = 0.995。
这就是你得到这些数字的原因。
您可以看到my post here了解更多细节(最后的 tex 坐标内容)。
关于openGL像素坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14739337/