我正在编码一个使用许多开源库的游戏,每个库都有自己的类型代表3D向量: -
- 子弹(物理引擎库): vector3 。
- ogre (3D渲染库): ogre :: vector3 。
- eigen (矩阵操纵库): vector3d 。
即使这些图书馆也很受欢迎,但我不想太多。
因此,我决定创建自己的类型名为 vect3 ,然后在它们之间创建转换器。
它非常适合我的需求,因为我的游戏逻辑想操纵向量3D。
尤其是在范围中 vect3 与物理,渲染或矩阵操纵无关的范围。
问题
我正在编码一个AI模块,该模块大量使用 eigen 。
对于原型,我使用 eigen :: matrixxf 很多。
Matrixxf 与 vector3 相比,它是一个更复杂的结构。
我计划创建自己的类 mymatrix 和重构AI以使用 mymatrix 而不是 eigen :: matrixxf 。
我怀疑这是否是一个好决定。
换句话说,我应该为我所看到和想要使用的所有内容创建自己的数据类型吗?
问题
为已经存在于一个或多个外部库中的类型选择其中一种选择的标准是什么?
a。应将类型作为新类创建。
b。使用库类型(以及哪个?)。
我当前的标准
-
(stront)与某个库有关的类型多少?高度相关= b。
-
(stront)图书馆的许可有多慷慨?慷慨= b。
-
(媒介)一种类型的复杂程度?复杂= b。
-
(弱)我需要多少速度?转换成本一些CPU。
罗伯特·马丁(Robert C.包装第三方代码始终是一个好习惯。迈克·芬尼(Mike Finney)在他的博客中引用马丁(Martin)并总结:
第三方代码可以进化
可以制作包装器的界面以完全适合您的应用程序的需求
在您的情况下,我会写自己的课程来包装矢量和矩阵库课。另一个优点是您的代码仅取决于其真正需要的。