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

时间:2016-04-16 08:59:42

标签: three.js

texture.dispose()似乎在r73中不起作用,但在r75中工作正常。我该怎么做才能在r73上运行它。

1 个答案:

答案 0 :(得分:0)

它不适用于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();

材料的纹理不会根据文档处理。 http://threejs.org/docs/#Reference/Materials/Material

希望对你有所帮助。

相关问题