openGL像素坐标

标签 opengl

我正在尝试使用 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/

相关文章:

C++ OpenGL 不渲染

opengl - 变换表面法向量和切向量

c++ - glMapBufferRange(...) 中的偏移量与 glDrawArraysInstanced(...) 中的第一个偏移量的关系

python - OpenGL 与 PyFace

c++ - 如何制作可移植且与编译器无关的 glBufferData?

c++ - OpenGL、FreeType2 : italic characters overlay each other

opengl - 计算具有 4 个顶点的面法线

opengl中的Java vbo,索引纹理坐标,可能吗?

c++ - 尝试使用 glTexImage2D 加载 2d 纹理,但只是变得空白

c++ - 如何使用 glPolygonStipple 创建粗斜条纹?