浏览代码

Added compressed textures support to MTLLoader.

This also adds compressed textures support to UTF8v2Loader.

Now with UTF8 + BufferGeometry + DDS we should have quite efficient and GPU friendly asset pipeline. One possible improvement would be using Rich Geldreich's Crunch compression instead of raw DDS for having smaller texture file sizes while downloading: http://code.google.com/p/crunch/

TODO: there seem to be some bug somewhere in our compressed texture pipeline (or in Chrome). I tried Ben's textures converted to DDS and I got boatload of GL warnings :S
alteredq 13 年之前
父节点
当前提交
a22b6a4609
共有 3 个文件被更改,包括 82 次插入16 次删除
  1. 25 15
      examples/js/loaders/MTLLoader.js
  2. 56 0
      examples/obj/male02/male02_dds.mtl
  3. 1 1
      examples/webgl_loader_obj_mtl.html

+ 25 - 15
examples/js/loaders/MTLLoader.js

@@ -398,31 +398,41 @@ THREE.MTLLoader.MaterialCreator.prototype = {
 
 THREE.MTLLoader.loadTexture = function ( url, mapping, onLoad, onError ) {
 
-        var image = new Image();
-        var texture = new THREE.Texture( image, mapping );
+	var isCompressed = url.toLowerCase().endsWith( ".dds" );
 
-        var loader = new THREE.ImageLoader();
+	if ( isCompressed ) {
 
-        loader.addEventListener( 'load', function ( event ) {
+		var texture = THREE.ImageUtils.loadCompressedTexture( url, mapping, onLoad, onError );
 
-            texture.image = THREE.MTLLoader.ensurePowerOfTwo_( event.content );
-            texture.needsUpdate = true;
-            if ( onLoad ) onLoad( texture );
+	} else {
 
-        } );
+		var image = new Image();
+		var texture = new THREE.Texture( image, mapping );
 
-        loader.addEventListener( 'error', function ( event ) {
+		var loader = new THREE.ImageLoader();
 
-            if ( onError ) onError( event.message );
+		loader.addEventListener( 'load', function ( event ) {
 
-        } );
+			texture.image = THREE.MTLLoader.ensurePowerOfTwo_( event.content );
+			texture.needsUpdate = true;
+			if ( onLoad ) onLoad( texture );
 
-        loader.crossOrigin = this.crossOrigin;
-        loader.load( url, image );
+		} );
 
-        return texture;
+		loader.addEventListener( 'error', function ( event ) {
 
-    };
+			if ( onError ) onError( event.message );
+
+		} );
+
+		loader.crossOrigin = this.crossOrigin;
+		loader.load( url, image );
+
+	}
+
+	return texture;
+
+};
 
 THREE.MTLLoader.ensurePowerOfTwo_ = function ( image ) {
 

+ 56 - 0
examples/obj/male02/male02_dds.mtl

@@ -0,0 +1,56 @@
+# Material Count: 5
+newmtl _01_-_Default1noCulli__01_-_Default1noCulli
+Ns 154.901961
+Ka 0.000000 0.000000 0.000000
+Kd 0.640000 0.640000 0.640000
+Ks 0.165000 0.165000 0.165000
+Ni 1.000000
+d 1.000000
+illum 2
+map_Kd 01_-_Default1noCulling.dds
+
+
+newmtl FrontColorNoCullingID_male-02-1noCulling.JP
+Ns 154.901961
+Ka 0.000000 0.000000 0.000000
+Kd 0.800000 0.800000 0.800000
+Ks 0.165000 0.165000 0.165000
+Ni 1.000000
+d 1.000000
+illum 2
+map_Kd male-02-1noCulling.dds
+
+
+newmtl male-02-1noCullingID_male-02-1noCulling.JP
+Ns 154.901961
+Ka 0.000000 0.000000 0.000000
+Kd 0.640000 0.640000 0.640000
+Ks 0.165000 0.165000 0.165000
+Ni 1.000000
+d 1.000000
+illum 2
+map_Kd male-02-1noCulling.dds
+
+
+newmtl orig_02_-_Defaul1noCu_orig_02_-_Defaul1noCu
+Ns 154.901961
+Ka 0.000000 0.000000 0.000000
+Kd 0.640000 0.640000 0.640000
+Ks 0.165000 0.165000 0.165000
+Ni 1.000000
+d 1.000000
+illum 2
+map_Kd orig_02_-_Defaul1noCulling.dds
+
+
+newmtl FrontColorNoCullingID_orig_02_-_Defaul1noCu
+Ns 154.901961
+Ka 0.000000 0.000000 0.000000
+Kd 0.800000 0.800000 0.800000
+Ks 0.165000 0.165000 0.165000
+Ni 1.000000
+d 1.000000
+illum 2
+map_Kd orig_02_-_Defaul1noCulling.dds
+
+

+ 1 - 1
examples/webgl_loader_obj_mtl.html

@@ -84,7 +84,7 @@
 					scene.add( object );
 
 				});
-				loader.load( 'obj/male02/male02.obj', 'obj/male02/male02.mtl' );
+				loader.load( 'obj/male02/male02.obj', 'obj/male02/male02_dds.mtl' );
 
 				//