|
1
11
OpenGL的矩阵堆栈(有多个——每个矩阵模式一个)用于分层模型。也就是说,可以定义子对象(例如,车轮)相对于其父实体(例如,汽车)的索具,而不考虑绘制子对象时父对象的位置/方向。也就是说,它允许您轻松直观地组合转换。 Matix堆栈(通常是GL矩阵操作)不能代替通用矩阵数学库。它们的存在只是为了让组合变换有效地应用于顶点数据。正如其他人所说,随着固定函数管道的消亡,这个功能已经从OpenGL中删除,因为着色程序的需求比旧管道的需求更不一致。 |
|
|
2
2
因为OpenGL会自动应用内置矩阵堆栈,所以您通常会使用它们。它们在最近的OpenGL版本中被删除,所以至少有一些人显然认为它们是不必要的。就个人而言,我认为这是一个糟糕的决定,但这就是生活。另一种选择是自己实现它们——唯一的安慰是,对于大多数使用3D图形的用户来说,无论如何,你通常都需要自己做一些矩阵乘法(等等),所以它通常不会有太大的区别。 |
|
|
3
2
矩阵堆栈用于具体化矩阵。通常用于表示转换相对于另一个转换的继承模型。可以在堆栈上加载矩阵并转换该空间中的顶点,然后通过弹出堆栈返回父空间。您可以自己用代码来管理所有这些内容,并且经常希望这样做——特别是当矩阵用于除简单地绘制或经常访问它们之外的其他事情时。动画系统就是一个典型的例子。 |
|
|
4
1
这不是必须的-你可以自己做所有的矩阵工作,随时调用glloadmatrix-但也没有必要替换它。如果你在使用vbos和显示列表,你会让生活变得困难。 |
|
|
5
0
矩阵是几何体(顶点)提供变化坐标系和投影的机制,最终以像素空间的形式出现在屏幕上。因此,从这个意义上说,一些矩阵代表不同的坐标系(例如腿等层次模型的父子关系),一些矩阵代表从世界空间到视图空间到设备(像素)空间的转换。基本上,它们是一种机制,通过它可以操纵顶点,但它们在语义上与操作(如那些操作)相对应。它们以一个堆栈的形式出现,以便于使用它们进行编程。 |