我目前正在第一次学习three.js和3D图形,我正在尝试创建一个体素引擎(想想Minecraft,Infiniminer)。我发现我的脚本占用了大量内存,但我怀疑为什么 - 我创建的每个块都使用一个新的Mesh对象,即使某些块看起来相同。
我问过一些我知道他们是否知道一种更节省内存的方法 - 他们建议为每种类型的块创建一个Mesh并使用矩阵为每个块的实例转换Mesh(它们是熟悉OpenGL,但没有那么多three.js)。 three.js是否允许这样的事情?如果是这样,你会怎么做,如果没有,还有其他选择吗?
(到目前为止,我的理解是你要渲染的每个项目都需要在场景图中,所以即使多个块看起来相同,你也需要添加块的多个副本(使用不同的x,y,z坐标)到图表。我可能错了。)
答案 0 :(得分:1)
我相信他们正在完成你在three.js轨迹球控制中所要求的内容。 Check out this link here
如果您在查看来源时遇到问题,请使用键盘快捷键cntrl + u(windows)
答案 1 :(得分:1)
美好的一天,只是澄清一下。 Three.js是WebGL API的包装器,它是OpenGL ES 2.0的一个子集,没有扩展。所以OpenGL相关知识在这里适用于某一点,你只需要通过Three.js源从高到低工作。
现在,拥有一组基础对象然后克隆并重新定位它们的想法是合理的。有一个clone()
函数,实际上这就是为你创建一个全新的对象,就像你在创建新的网格物体一样,但在运行时更容易访问。
如果我可以提供一些建议,查看一些代码可以帮助我们为您的用例找出更精确的优化。也许你有一些可能/应该被推到初始阶段的调用,也许内存正在其他地方泄漏?或者,您可以考虑合并某些几何体,如果它在代码或3D建模程序中保持静态。这不会减少相当数量,但肯定有助于简化你的场景。