为什么OpenGL绘制的图像是倒置的?

8

我还没有看到有人回答这个问题。我只看到其他人告诉他们某些东西是上下翻转的,然后另一个人告诉他们翻转代码。但我想知道的是,为什么OpenGL会翻转Y坐标轴呢?这毫无意义。

3个回答

5

OpenGL假设Y坐标从下往上,如果您的代码假设相反,则会倒置显示。

要了解更多信息,请搜索opengl坐标系


这是人们做出的一个错误假设。OpenGL依赖于底层图像数据,您应该使用它来设置纹理。例如,如果您使用“lodepng”,则纹理将在右上角具有(0,0),因为它从底部向上加载。如果您使用“GdiPlus”,则在右上角将具有(0,1),因为它从顶部向下加载。 - c z

2
一切取决于您如何设置场景。有很多因素会导致这种效果。

例如,相机的位置/方向会影响您看到的最终场景。

gluLookAt(camera[0], camera[1], camera[2],  /* look from camera XYZ */ 
                  0,         0,         0,  /* look at the origin */ 
                  0,         1,         0); /* positive Y up vector */

当处理纹理时,指定错误的纹理坐标可能会翻转绘图。
但最常见的问题可能是人们忘记OpenGL将坐标(0,0)定义为显示器的左下角(Y向上)。

2

OpenGL工作在笛卡尔坐标系上。在笛卡尔坐标系中,0,0位于中心,正坐标向上和向右延伸。任何坐标都可以映射或转换为程序员想要的任何坐标,但这是默认设置。当您提供纹理坐标时,OpenGL希望它们是笛卡尔坐标,而不是自上而下的坐标。这些坐标可以由程序进行转换,但最快的解决方法是翻转纹理。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接