3d实体在屏幕上的列阵图画

时间:2013-03-05 20:34:53

标签: algorithm 3d screen render

我正在制作3D游戏。在游戏中,我有一个在空间中有位置的实体列表。

仅绘制屏幕上或相机半径范围内的实体的最佳方法是什么?

例如,如果我有100,000个实体,那么它们中的10个将在给定时间出现在屏幕上。迭代整个数组并有一个:

是一种浪费
if(entity.position.x > (camera.x-radius) || entity.position.x < (camera.x+radius)|| ..y..z)
   draw(); // or update

3 个答案:

答案 0 :(得分:1)

也许你应该用八叉树划分你的空间。您必须在八叉树单元格中分配/维护对象。使用这种结构,您可以快速找到必须渲染的Octree单元格,然后在这些单元格内渲染实体。

这可能并不明显,但你可能会获得更好的表现!如果对象可能移动,则更难:您必须使八叉树保持最新而不迭代所有实体。

答案 1 :(得分:1)

这称为查看Frustum Culling 。这是深度article with source code

我还找到了另一种选择,similar article

答案 2 :(得分:1)

这取决于您使用的相机和视图的类型。有几种可能性:

2D视图或自上而下的地形

您可以使用视图矩形并测试对象的边界矩形是否与视图矩形相交。

3D视图或透视

您可以使用视锥体(锥形体积)并测试每个对象,无论边界框是否与平截头体相交。