【问题标题】:Why does OpenGL draw things upside down?为什么 OpenGL 会把东西颠倒过来?
【发布时间】:2013-02-09 17:44:42
【问题描述】:

我还没有看到有人回答这个问题。我所看到的只是人们告诉他们某些事情是颠倒的,然后其他人告诉他们翻转他们的代码。但我想知道的是,为什么 OpenGL 会翻转 Y 坐标?没有意义。

【问题讨论】:

    标签: opengl drawing rendering flip


    【解决方案1】:

    OpenGL 假设 Y 坐标从下到上。如果您的代码假定相反的内容会颠倒显示。

    有关 opengl 坐标系

    的更多信息 Google

    【讨论】:

    • 人们所做的假设并不正确。 OpenGL 依赖于底层图像数据,您应该使用它来设置纹理。例如,如果您使用“lodepng”,纹理将在右上角具有 (0, 0),因为它是自下而上加载的。如果你使用“GdiPlus”,你会在右上角有 (0, 1),因为它是自上而下加载的。
    【解决方案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 向上)。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多