Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 纹理处理在三个JS版本73中不起作用_Three.js - Fatal编程技术网

Three.js 纹理处理在三个JS版本73中不起作用

Three.js 纹理处理在三个JS版本73中不起作用,three.js,Three.js,texture.dispose()在r73中似乎不起作用,但在r75中效果很好。我应该怎么做才能让它在r73上运行。它在r77中也不起作用 使用texture.dispose()时,dispose通常应调用onTextureDispose: function onTextureDispose( event ) { var texture = event.target; texture.removeEventListener( 'dispose', onTextureDispose ); d

texture.dispose()在r73中似乎不起作用,但在r75中效果很好。我应该怎么做才能让它在r73上运行。

它在r77中也不起作用

使用texture.dispose()时,dispose通常应调用onTextureDispose:

function onTextureDispose( event ) {

var texture = event.target;

texture.removeEventListener( 'dispose', onTextureDispose );

deallocateTexture( texture );

_infoMemory.textures --;

}
但事实并非如此。不知道这是一个bug还是什么,但为了取消分配纹理,我必须在清除场景时执行material.map.dispose()(以便准备在场景中插入其他纹理)

例如:

   var clearScene = function(){

    stopAnimate();

    if(scene && scene.children.length>0){

      for( var i = scene.children.length - 1; i >= 0; i-- ) {

        if( scene.children[i] instanceof THREE.Sprite ){

          if( scene.children[i].material.map ) scene.children[i].material.map.dispose();

        }

        if( scene.children[i] instanceof THREE.Mesh ){

          if( scene.children[i].material.map ) scene.children[i].material.map.dispose();

        }

        scene.children[i].material.dispose();
        scene.remove(scene.children[i]);
        scene.children.splice(i,1);

      }

    }

  };
注意:只需使用:

scene.children[i].material.dispose();
材质的纹理不会根据文档进行处理


希望这对您有所帮助。

它在r77中也不起作用

使用texture.dispose()时,dispose通常应调用onTextureDispose:

function onTextureDispose( event ) {

var texture = event.target;

texture.removeEventListener( 'dispose', onTextureDispose );

deallocateTexture( texture );

_infoMemory.textures --;

}
但事实并非如此。不知道这是一个bug还是什么,但为了取消分配纹理,我必须在清除场景时执行material.map.dispose()(以便准备在场景中插入其他纹理)

例如:

   var clearScene = function(){

    stopAnimate();

    if(scene && scene.children.length>0){

      for( var i = scene.children.length - 1; i >= 0; i-- ) {

        if( scene.children[i] instanceof THREE.Sprite ){

          if( scene.children[i].material.map ) scene.children[i].material.map.dispose();

        }

        if( scene.children[i] instanceof THREE.Mesh ){

          if( scene.children[i].material.map ) scene.children[i].material.map.dispose();

        }

        scene.children[i].material.dispose();
        scene.remove(scene.children[i]);
        scene.children.splice(i,1);

      }

    }

  };
注意:只需使用:

scene.children[i].material.dispose();
材质的纹理不会根据文档进行处理


希望这对您有所帮助。

到目前为止,您找到了解决方案吗?为什么事件侦听器在这种情况下不工作?到目前为止,您找到了任何解决方案吗?为什么事件侦听器在此场景中不工作?