代码之家  ›  专栏  ›  技术社区  ›  Clark Gaebel

OpenGL中矩阵堆栈的意义是什么?

  •  4
  • Clark Gaebel  · 技术社区  · 15 年前

    为什么我要使用OpenGL的矩阵堆栈(而不是包装我自己的矩阵类并使用它)?我不太清楚为什么这么简单的任务这么复杂。有什么特殊的使用案例吗?

    如果不需要,什么是好的替代品?

    5 回复  |  直到 14 年前
        1
  •  11
  •   Drew Hall    15 年前

    OpenGL的矩阵堆栈(有多个——每个矩阵模式一个)用于分层模型。也就是说,可以定义子对象(例如,车轮)相对于其父实体(例如,汽车)的索具,而不考虑绘制子对象时父对象的位置/方向。也就是说,它允许您轻松直观地组合转换。

    Matix堆栈(通常是GL矩阵操作)不能代替通用矩阵数学库。它们的存在只是为了让组合变换有效地应用于顶点数据。正如其他人所说,随着固定函数管道的消亡,这个功能已经从OpenGL中删除,因为着色程序的需求比旧管道的需求更不一致。

        2
  •  2
  •   Jerry Coffin    15 年前

    因为OpenGL会自动应用内置矩阵堆栈,所以您通常会使用它们。它们在最近的OpenGL版本中被删除,所以至少有一些人显然认为它们是不必要的。就个人而言,我认为这是一个糟糕的决定,但这就是生活。另一种选择是自己实现它们——唯一的安慰是,对于大多数使用3D图形的用户来说,无论如何,你通常都需要自己做一些矩阵乘法(等等),所以它通常不会有太大的区别。

        3
  •  2
  •   Montdidier rioc0719    15 年前

    矩阵堆栈用于具体化矩阵。通常用于表示转换相对于另一个转换的继承模型。可以在堆栈上加载矩阵并转换该空间中的顶点,然后通过弹出堆栈返回父空间。您可以自己用代码来管理所有这些内容,并且经常希望这样做——特别是当矩阵用于除简单地绘制或经常访问它们之外的其他事情时。动画系统就是一个典型的例子。

        4
  •  1
  •   Will    15 年前

    这不是必须的-你可以自己做所有的矩阵工作,随时调用glloadmatrix-但也没有必要替换它。如果你在使用vbos和显示列表,你会让生活变得困难。

        5
  •  0
  •   mlepage    14 年前

    矩阵是几何体(顶点)提供变化坐标系和投影的机制,最终以像素空间的形式出现在屏幕上。因此,从这个意义上说,一些矩阵代表不同的坐标系(例如腿等层次模型的父子关系),一些矩阵代表从世界空间到视图空间到设备(像素)空间的转换。基本上,它们是一种机制,通过它可以操纵顶点,但它们在语义上与操作(如那些操作)相对应。它们以一个堆栈的形式出现,以便于使用它们进行编程。

    推荐文章