首页 > 解决方案 > Three.js 错误:“帧缓冲区和活动纹理之间形成反馈循环” - 渲染反射

问题描述

我正在使用带有WebGLCubeRenderTargetCubeCamera来渲染类似于此处示例的周围反射 - https://threejs.org/examples/#webgl_materials_cubemap_dynamic

但是该示例不断给出此错误:
[.WebGL-000052760009C700] GL_INVALID_OPERATION:Framebuffer 和活动纹理之间形成反馈循环。
有人看到这个问题吗?我的代码:

const reflection=()=> {

        renderer.outputEncoding = THREE.sRGBEncoding; // for post processing pass

        cubeRenderTarget1 = new THREE.WebGLCubeRenderTarget( 256, {
            format: THREE.RGBFormat,
            generateMipmaps: true,
            minFilter: THREE.LinearMipmapLinearFilter,
            encoding: THREE.sRGBEncoding // prevents the material's shader from recompiling every frame
        } );

        cubeCamera1 = new THREE.CubeCamera( .01, 10, cubeRenderTarget1 );
        cubeCamera1.position.z = 3
        cubeCamera1.position.y = -4

        reflectionMaterial = new THREE.MeshBasicMaterial( {
            envMap: cubeRenderTarget1.texture,
            color: 0x011111,
        } );

    }
    reflection()


gltfLoader.load(
          '/exportPackages/sceneMaya.glb', 
          (gltf) =>
          {   

            let meshGLB= gltf.scene.children.find(child => child.name === 'mesh_0')

            meshGLB.material = reflectionMaterial 
            
            scene.add(gltf.scene)           
          })



const animate =()=> {
     cubeCamera1.update( renderer, scene ); }; animate()

标签: javascriptreactjsthree.js

解决方案


修复:我需要添加

meshGLB.visible = false;
cubeCamera1.update( renderer, scene );
meshGLB.visible = true;

animate()防止材质本身呈现。


推荐阅读