根据我在像素中心约定方面所读到的内容,OpenGL 认为像素的中心位于其半像素位置。这使得光栅化的像素中心“匹配”用于纹理化的纹素中心。
因此,如果满足以下 4 个条件:
- “世界” 坐标系“完全”匹配视口(viewport)分辨率(例如均为 1920x1080)
- 投影是正交 (glm::ortho )
- 每个纹理的宽度/高度匹配由其对应的四元数顶点定义的 1 到 1(纹素到像素)
- 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/