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

texel / pixel matching in OpenGL 3.x / 4x

根据我读到的像素中心约定,OpenGL 认为像素的中心位于其 半像素位置 。这使得光栅化的像素中心 "match" 纹理中心的纹理。

所以,如果满足以下4个条件:

  1. "world" 坐标系 "exactly" 与 视口 分辨率匹配(例如均为 1920x1080)
  2. 投影是正交 (glm::ortho)
  3. 每个 纹理的 width/height 匹配 1 到 1(纹素到像素)由其对应的四元数顶点定义的纹理
  4. UV [0,1] 用于纹理映射

然后:

有什么提示吗?

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

vec2 dx_vtc = dFdx(texture_coordinate); vec2 dy_vtc = dFdy(texture_coordinate);

浮动 len1 = 长度(dx_vtc); float len2 = 长度(dy_vtc);

如果长度差为零,那么我们可以断定存在一对一映射。