Просмотр исходного кода

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 лет назад
Родитель
Сommit
a22b6a4609

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