(1)需求在three.js中每当创建实例时,都会分配一定的内存。所以在项目中,会出现很多加载资源比较大的情况。为了提高性能和避免应用程序中的内存泄漏,有必要处置未使用的类库实体。但是,three.js会创建渲染所需的特定对象,例如几何体或材质,以及与WebGL相关的实体,例如缓冲区或着色器程序。非常值得注意的是,这些对象不会自动释放;相反,应用程序必须使用特殊的API来释放这些资源。(2)类名定义了如何实现发布方法。几何属性集合的顶点信息为每个属性创建一个WebGLBuffer类型的对象,调用BufferGeometry.dispose()。由于性能原因,将如何渲染材质对象用于构建着色器程序尽量重用现有的着色器程序。shader程序只有在相应材质被丢弃后才能删除。在执行Material.dispose()纹理时,一个纹理可以同时被多个材质使用,从而创建一个Texture实例。three.js会在内部创建一个WebGLTexture实例,调用Texture.dispose()渲染目标WebGLRenderTarget类型对象。分配多个对象WebGLTexture、WebGLFramebuffer和WebGLRenderbuffer执行WebGLRenderTarget.dispose()控制器或后处理过程等杂项示例目录类dispose()(三)常见问题1.为什么three.js不能自动处置对象?three.js不知道用户创建的实体(例如几何体或材料)的生命周期或范围,这是应用程序的责任。例如,即使当前未使用材质进行渲染,下一帧也可能需要它。从场景中移除网格是否也会破坏其几何体和材质?不,您必须通过dispose()显式处理几何体或材料。请记住,几何体(geometry)或材质(material)可以在3D对象(例如网格(grid))之间共享。2、three.js会提供缓存对象数量的信息吗?是的,WebGLRenderer.info——渲染器中的一个特殊属性有大量关于视频内存和渲染过程的统计信息。内部存储了多少纹理、几何和着色器程序。3.我怎么知道什么时候该处理东西?何时适合调用dispose()很大程度上取决于具体的用例。没有必要总是销毁对象。例如,由多个关卡组成的游戏。对象处理用到的地方是切换关卡的时候。应用程序可以浏览较旧的场景并丢弃所有过时的材料、几何图形和纹理贴图。如果您销毁仍在使用的对象,它不会导致运行时错误。参考链接https://threejs.org/docs/#man...
