为什么Doom3会切换列和行主矩阵?

Dar*_*nor 12 c++ opengl

我一直在勇敢地试图弄清楚厄运3的源代码.我偶然发现的一件事是在整个解决方案中使用的矩阵类.这是一个相当简单的代码,但我做出的决定是我无法理解的.他们决定将Column和Major行专业混合使用不同的尺寸.

  • 3x3矩阵是专栏
  • 每隔一个矩阵都是行专业(我想 - 还没有全部检查过)

有谁知道为什么可能做出这个决定?由于OpenGL是专栏专业,我认为只使用专业列是有意义的吗?

dat*_*olf 10

就像Oli Charlesworth已经评论过的那样,这可能是改善缓存行为的决定.OpenGL的矩阵是列专业,因为在客户端,你对列比对行更感兴趣(列构成坐标系的基础).但是,如果矩阵用于物理或碰撞检测等计算,那么很多操作都是行专业.因此,这很大程度上取决于主要在相关矩阵上执行的操作类型.Doom3引擎大量使用Plücker坐标,因此选择正确的内存布局会对整体性能产生非常强烈的影响,并且矩阵之间的简单切换可能会增加/删除大量涉及的操作.