2016-07-20 59 views
0

我有大量的3D对象(即小行星),我想呈现。我知道我可以将所有几何合并成一个单独的几何,或者我可以使用缓冲几何(这些都是同样的东西?)。THREE.js - 动态绘制大量物体?

但是,我的小行星物体总是来来去去。在任何时候,更多的小行星可以创建并放置到场景中。

*问题* 如何处理渲染这个充满活力的一组对象,而无需重新创建缓冲区或合并的几何形状(如这些都需要对性能有很大的打击)?

我怀疑现场或缓冲的动态性质必须去。

+0

你在说什么对象和每个对象有多少面? FYI'buffer-geometry'与'merged-geometry'不同,即使后者可以与前者一起实现。 – gaitat

+0

我没有说他们是相同的概念。这就是为什么使用术语“或”。关于这些对象,我简单地使用BoxGeometry。 – AlvinfromDiaspar

回答

2

处理此问题的一种方法是将所有小行星合并到一个几何中,但要记下每个小行星在合并几何中的位置(索引+计数)。例如,假设合并的几何图形是来自3个小行星,小行星A从0到10,B从10到20;当小行星需要被删除时,将小行星的相关线段的位置数据设置为0。 C 20到30.要删除小行星B,只需将合并几何中的位置数据从10到20设置为0.

如果您需要动态“创建”新的小行星,则还需要将段在合并的几何图形中创建孔。继续上面的例子,如果你需要添加小行星D,你只需填写位置数据从10到20(从“删除”B)到D是。显然,如果在需要创建新的小行星时没有剩余的段孔,则需要放大整个合并几何图形并进行相应处理。

+0

感谢您的输入。我不认为我真的按照你的解释。简而言之,您建议创建一个与我可能需要的一样大的缓冲区?我不认为这对我的情况是一个好主意。这似乎太过分了,没有可能成为非常有限的(即不灵活)。 – AlvinfromDiaspar

+0

您需要一次显示最大数量的小行星。假设你的合并几何看起来像这样,每个小行星在合并的几何缓冲区中需要2个元素:[A,A,B,B,C,C,D,D]。将B从绘图中删除只是将B从合并的几何缓冲区中归零:[A,A,0,0,C,C,D,D]。是的,可能存在空间效率低下的问题,但性能上的折衷是非常值得的。 –

+0

不灵活,也许吧。但是那些早期的游戏(以及现代游戏)通常会因为某种原因一次只能显示___的最大数量。 :) –