OpenGL 3.x / 4x中的纹理像素/像素匹配

时间:2018-11-30 17:07:08

标签: c++ opengl glm-math

根据我对像素中心约定的理解,OpenGL将像素的中心视为其半像素位置。这使得用于栅格化的像素中心“匹配” 用于纹理化的texel中心。

因此,如果以下四个条件成立:

  1. “世界” 坐标系“完全”匹配视口分辨率(例如均为1920x1080)
  2. 投影是正交的(glm :: ortho)
  3. 每个纹理的宽度/高度匹配由其对应的四元数顶点定义的那些(以像素为单位,从1:1匹配)
  4. UV [0,1] 用于纹理映射

然后:

  • 纹理的纹理像素和视口像素之间的匹配将为 1比1 吗?

  • 不需要添加/减去任何校正(+/- 0.5 )吗?

  • 关于如何检查它是否为一对一匹配的任何想法?

有什么提示吗?

1 个答案:

答案 0 :(得分:1)

您可以在glsl中使用偏导函数。 偏差导数函数这些是片段着色器指令,可用于计算任何值相对于屏幕空间坐标的变化率。 这个任何值都可以是纹理坐标 所以

vec2 dx_vtc = dFdx(纹理坐标); vec2 dy_vtc = dFdy(texture_coordinate);

float len1 = length(dx_vtc); float len2 = length(dy_vtc);

如果长度差为零,那么我们可以得出结论,存在一对一的映射。