我是否需要4D纹理坐标才能在opengl中实现透视正确的纹理贴图?

时间:2013-11-23 11:35:52

标签: texture-mapping opengl-3

我遇到了网格中仿射变换四边形的问题,因此错误的纹理坐标插值。我相信在固定功能管道中你可以设置下面的glHint:

glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

但是看一下这个文档似乎已被弃用了。 所以我想没有更简单的“解决方案”了,我需要将所有纹理坐标指定为4D向量?

另外这是否意味着如果我想加载仅指定2D纹理坐标的网格,我需要手动检测四边形并对此进行校正?

下面的图片显示了我用4片切片制成的圆环问题。 Example from my program, a torus made out of 4 slices

我也尝试在Nicol Bolas here建议的着色器中使用插值限定符。

虽然我认为平滑是默认设置。这对我的输出没有影响。

关于如何进行透视正确纹理映射的问题已经多次出现在SO上。但我在问是否有更简单的解决方案。关于为什么固定功能管道能够为你做这个的个人结论是因为GL_QUADS。我觉得指定4D纹理协调是核心配置文件中唯一的解决方案。

以下是有关4D坐标如何工作的主题的一些链接:

Getting to know the Q texture coordinate...

perspective-correct-texturing-of-trapezoid-in-opengl-es-2-0

correct-glsl-affine-texture-mapping

1 个答案:

答案 0 :(得分:0)

我被误导了固定功能管道中glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);的用途。我被告知这个提示应该可以防止我们上面看到的错误。我自己在固定功能管道中测试了它,结果证明提示只是控制顶点变换的透视正确性。

因此,为了解决上述问题,除了提供投影纹理坐标之外,没有任何解决方案,这是我所联系的大多数其他SO问题的解决方案。

我向reddit发布了相同的问题并收到了令人满意的解释,来源:http://www.reddit.com/r/opengl/comments/1ral2k/perspective_correct_texture_mapping/cdlhw04