我正在研究Ogre3D代码和WildMagic代码,发现它们处理核心类的方式有些不同。由于我正在创建自己的核心,我想知道哪种方式是更好的实践,并且在资源方面可能更好。
在WildMagic中,有一个从Table类继承的Matrix类(不是多态的)。表类可以有N行和N列,并获得列和行的getter和setter。然后,Matrix类具有仅对矩阵有意义的功能,并方便地从Table继承。在这种情况下,向量也可以从表中继承(尽管WildMagic没有这样做)。WildMagic还有一个Transform对象,用于存储节点的本地和派生变换。因此,一个节点将有两个包含必要转换(包括位置、旋转、比例)的Transform对象。
另一方面,在Ogre3D中,Matrix类不继承任何东西,而Ogre3D的节点有变量来存储本地和派生位置:Vector localPos; Vector derPos; Matrix localRot; Matrix derRot; 等等
现在请记住,这些是核心对象,每帧将使用/更新/修改数千次,如果您意识到在完全依赖这些核心类的游戏中存在性能瓶颈,则相当难以更改它们。
所以现在的问题是:
- Matrix类从Table类继承是否会有成本,与Matrix类一开始就完成所有工作相比?
- 在Node类中有3个Transform对象实例与通过成员变量公开底层数据类型之间是否有成本?(我意识到在两种情况下,都是组合,只是在一种情况下,有一个用于转换的"包装器",而在另一种情况下,转换直接公开。我想这个问题可以重新表述为:
一个包装器是否有成本(考虑到它是需要创建和销毁的对象)?
- 假设我正在编写一个应用程序,每个计算(甚至是简单的向量加法)都很重要。您会改变您的选择吗?