首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在three.js中正确配置scene.environment

如何在three.js中正确配置scene.environment
EN

Stack Overflow用户
提问于 2021-03-28 00:57:36
回答 1查看 144关注 0票数 0

我的应用程序中的以下函数应该处理一个现有的场景环境,然后通过调用另一个自定义函数重新创建它。

代码语言:javascript
运行
复制
function adjustAmbientLight(ambient_light) {
    ambient_intensity = ambient_light;
    const pmremGenerator = new THREE.PMREMGenerator(renderer);
    if (scene.environment) {scene.environment.dispose()}
    scene.environment = pmremGenerator.fromScene(new SetNewSceneEnvironment()).texture;
}

该函数完美地创建了新环境。

但是,当我通过将renderer.info.memory.textures记录到控制台进行测试时,我发现scene.environment.dispose()并没有消除相关的纹理。因此,最后一行代码会导致内存泄漏,因为它会在每次运行函数时创建并添加一个额外的纹理。

有没有人对如何正确处理环境纹理有什么建议?

EN

回答 1

Stack Overflow用户

发布于 2021-03-28 13:23:09

经过调查,我发现罪魁祸首是调用pmremGenerator.fromScene(env_scene)返回的WebGLRenderTarget

以前,我使用WebGLRenderTarget来获得一个用作环境贴图的纹理,之后我处理了这个纹理。然而,它并没有解决这个问题,因为WebGLRenderTarget在内部分配持久资源。

我需要保留对WebGLRenderTarget的引用,并显式地处理它以释放内部资源。

下面是我的最后一个环境地图创建函数,它可以正确地处理内部资源。

代码语言:javascript
运行
复制
function SetNewSceneEnvironment() {
    //create scene to be mapped
    const env_scene = new THREE.Scene();
    const roomMaterial = new THREE.MeshStandardMaterial( { side: THREE.BackSide, color: "white"} );
    const room = new THREE.Mesh( new THREE.BoxGeometry(), roomMaterial );
    room.position.set( 0, 0, 0 );
    room.scale.set( 40, 40, 40 );
    env_scene.add( room );
    const env_alight = new THREE.AmbientLight(0xFFFFFF,Math.ceil(ambient_intensity*20)/10);
    env_scene.add(env_alight);

    //map the scene
    const pmremGenerator = new THREE.PMREMGenerator(renderer);
    const renderTarget = pmremGenerator.fromScene(env_scene)
    const env_texture = renderTarget.texture;

    //dispose of resources
    room.geometry.dispose();
    roomMaterial.dispose();
    renderTarget.dispose();
    pmremGenerator.dispose();

    return env_texture;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66833916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档