【问题标题】:Modifying OpenGL axis system修改OpenGL轴系
【发布时间】:2010-05-19 15:05:25
【问题描述】:

我正在使用带有 gluPerspective 的 OpenGL,我需要做些什么才能使其使用原点位于左上角而不是左下角的轴系统?

【问题讨论】:

    标签: opengl graphics 3d vertices


    【解决方案1】:

    我想说直接对投影矩阵进行操作是这种操作的一种干净的方式。但是,如果您有任何机会需要替代方案:

    您可以只使用glScalef(1.f, -1.f, 1.f) 来翻转轴。

    这也只是对 GL_MODELVIEW 或 GL_PROJECTION 矩阵的操作(无论当前处于活动状态)。

    【讨论】:

      【解决方案2】:

      您可以通过翻转投影矩阵的y 轴来做到这一点。所以:

      glMatrixMode(GL_PROJECTION);
      glPushMatrix();
      glLoadMatrix( [1  0  0  0; 
                     0 -1  0  0; 
                     0  0  1  0; 
                     0  0  0  1] ); 
                  // ^ pseudo-code, replace with actual matrix
      

      应该这样做。

      您也可以对相同的矩阵使用glMultMatrix 调用(而不是Push 然后Load),但这种方式更容易反转(只需稍后在GL_PROJECTION 堆栈上调用glPopMatrix) .

      您也可以使用相同的技术来翻转任何其他轴;只需将减号放在适当的位置即可。

      【讨论】:

      • glLoadMastrix 不会杀死之前设置的投影吗?它完全取代了投影矩阵,这不是我们所要求的。
      • 这就是glPushMatrix 调用的目的,它将现有矩阵向下推入堆栈,保留现有转换。新矩阵与前一个矩阵组成,它不会替换它。
      • 据我所知,正如我在互联网上找到的每本手册所说,LoadMatrix 总是替换堆栈上的矩阵,并且永远不会组合。 PushMatrix 仅有助于之后使用 PopMatrix 恢复原始矩阵(并放弃加载的矩阵)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多