Преглед на файлове

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' );
 
 				//