我使用STL加载器将stl文件加载到three.js场景中。这些stl文件的范围从5mb到50mb。
是否有一种方法可用于逐步加载/流式传输/增加细节级别(不确定正确的术语),因为模型加载,以便我的用户在任何事情之前都不会盯着空白屏幕几分钟出现?
如果模型是20,000个三角形,那么three.js是否有一个方法可能首先只加载2,000个然后再进入完全详细的模型?
答案 0 :(得分:12)
真正的渐进式加载/网格流不是开箱即用的。虽然这很好,但是可行。
使用POP缓冲区完成了没有three.js的WebGL:http://x3dom.org/pop/& https://github.com/thibauts/pop-buffer
其中一个演示是:http://x3dom.org/pop/happy.html
我希望有一天我们会为三个.js提供漂亮的POP缓冲区(或者类似的替代方案)渐进式加载 - 也在我/我们的待办事项/愿望清单中,但在此之前还有很多东西在这里......肯定不是如果有人早些时候写的话,请注意:)
三个确实包含一个简单的LOD机制,但它有助于渲染负载而不是加载时间:http://threejs.org/docs/#Reference/Objects/LOD& http://threejs.org/examples/webgl_lod.html
对于一个简单的解决方案,你可以创作低和低。高版本的模型和编写自定义加载逻辑,只需首先加载低版本和显示它们,然后继续加载高版本等。
我们在一个项目中完成了这项工作,按预期正常工作。我能想到的唯一不足之处是它增加了获得高版本的总时间。但是低可以非常小,所以没关系(在我们的例子中,低多边形没有纹理,只有垂直颜色,然后高的多边形有更多的多边形,但基本上也是非常大的纹理)。
答案 1 :(得分:1)
目前最好的解决方案是Nexus,最近几年一直在大力开发。它具有用于threejs的加载器。
答案 2 :(得分:0)
Nexus和popbuffer可能是进行批量LoD加载的正确解决方案。但是,如果您只想尝试一个简单的(可以正常使用的)解决方案,建议您看一下: https://github.com/amd/rest3d
它基于GLTF格式,一个接一个地传输单个网格。从某种意义上讲,它减少了第一次渲染的等待时间。实际上,如果重新排列网格数据并使用流式缓冲区下载数据,则可能会获得令人满意的加载/渲染结果。