【问题标题】:openGL pixel coordinateopenGL 像素坐标
【发布时间】:2014-08-24 10:35:36
【问题描述】:

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

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

【问题讨论】:

标签: opengl


【解决方案1】:

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。

这就是你得到这些数字的原因。

您可以查看my post here 了解更多详细信息(tex 坐标朝向末尾)。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 2011-12-04
      • 2023-04-06
      相关资源
      最近更新 更多