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

标签 c++ opengl glm-math

根据我在像素中心约定方面所读到的内容,OpenGL 认为像素的中心位于其半像素位置。这使得光栅化的像素中心“匹配”用于纹理化的纹素中心。

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

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

然后:

  • 纹理的纹素和视口(viewport)的像素之间的匹配将是1 对 1 ?

  • 无需添加/减去任何修正 (+/-0.5) ?

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

有什么提示吗?

最佳答案

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

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

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

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

关于c++ - OpenGL 3.x/4x 中的纹素/像素匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53561950/

相关文章:

c++ - 在 TinyXML 中解析 <multi_path literal ="not_measured"/>

c - OpenGL 绘制缓冲区问题

c++ - opengl 在屏幕上渲染之前旋转对象以设置其正确的面

c++ - 级联阴影贴图闪闪发光

opengl - glm中矩阵值的顺序不正确?

c++ - 检查框内是否有 3D 点

c++ - 根据类模板的类型参数自动化类模板的大小参数

c++ - Opencv 中的 Mat_<unsigned char> - Mat 数据类型

c++ - 在 Windows 中使用 cygwin 编译 ncmpcpp

c++ - 旋转并移动到 OpenGL 中的相对中心