代码之家  ›  专栏  ›  技术社区  ›  mk12

OpenGL-正交投影矩阵,glviewport

  •  6
  • mk12  · 技术社区  · 14 年前

    我很难理解这些是如何工作的。首先,在二维游戏中,投影矩阵应该设置为正交,左,右,上,下匹配窗口,对吗?但是当窗口调整大小时,我应该只更改glviewport,而不是投影矩阵吗?如何保持纵横比?

    有人能解释这两件事的目的吗,在二维正交游戏中,以便我更好地理解它?

    感觉就像OpenGL在二维设置中做了很多无用的事情。当图像已经存在时,光栅化和计算片段,将顶点坐标转换为NDC只会被glviewport转换回它们已经存在的位置。

    另外,为什么在传统的自由OpenGL中,我们必须自己制作矩阵,而不是像glviewport那样自己计算?

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  5
  •   Bahbar    14 年前

    不要混淆输入到GL的内容和输出到的内容。

    用于计算正交矩阵的参数是与 输入 . 投影矩阵的输出始终是[-1:1]x[-1:1]x[-1:1]立方体。

    视区将该立方体转换为渲染目标坐标。因此,这通常是您想要更改以匹配新窗口大小的内容(好吧,它和framebuffer本身)。

    是的,GL为二维渲染路径做了很多无用的工作。毕竟这是一个3D API…

    最后我要说的是,只要在前面提到的多维数据集中输出顶点着色,就不必构建矩阵来进行二维转换。如果要写入视区的右上角,可以直接将顶点传递为(0,0)(0,1)(1,0)(1,1),然后简单地输出。

        2
  •  -2
  •   Jack    14 年前

    不确定你使用的是什么语言OpenGL,但是如果你正在寻找C++这个网站, http://nehe.gamedev.net/ 几乎涵盖了所有内容,并有从简单的“你好世界”到基本游戏和3D效果的教程。

    希望它有帮助