我想将面向数据的设计(基于例如这篇文章)应用于我的简单物理引擎。我专注于优化碰撞测试,因为它是其中最昂贵的部分。
我已经将可能与玩家碰撞的边界球体组织成单一的vector
:
struct Sphere{ //I don't split sphere into parts,
//as I usually access both position and radius in my calculations
Point3D position;
float radius;
};
std::vector<BoudingSphere> spheres;
我在单个函数/方法中测试与它们的冲突。在那一点上,一切对我来说都很清楚。
问题是,我还有一些更通用的结构,例如:
struct Polygon{ //it may e.g. represents the area or be used for more precise tests
std::vector<Point2D> points;
};
我想以相同的方式创建不是一个好习惯std::vector<Polygon>
,因为嵌套vector
( points
) 将在内存中占据很多位置(保留它)。
另一方面,我不能假设总是有 2、3、4 或 10 个点(差异很大,最多大约 20,但通常要少得多)。
而且我不想从Polygon
一般结构切换到例如三角形系列(因为在许多计算中它比分离三角形更快)。
那我该怎么办?我想本着面向数据设计的精神,在我的Polygon
.
我必须摆脱内部vector
(points
)吗?如果有怎么办?