提交 4a82869c 编写于 作者: A alteredq

Added possibility of using workers for CTM decompression.

To be used with care, for the moment there is no mechanism to prevent shooting yourself in the foot with spawning too many workers.
上级 08e9c5b1
......@@ -21,7 +21,7 @@ THREE.CTMLoader.prototype.constructor = THREE.CTMLoader;
// - url (required)
// - callback (required)
THREE.CTMLoader.prototype.load = function( url, callback ) {
THREE.CTMLoader.prototype.load = function( url, callback, useWorker ) {
var xhr = new XMLHttpRequest(),
callbackProgress = null;
......@@ -34,11 +34,39 @@ THREE.CTMLoader.prototype.load = function( url, callback ) {
if ( xhr.status == 200 || xhr.status == 0 ) {
THREE.CTMLoader.prototype.createModel( xhr.responseText, callback );
var binaryData = xhr.responseText;
var s = Date.now();
if ( useWorker ) {
var worker = new Worker( "js/ctm/CTMWorker.js" );
worker.onmessage = function( event ) {
var ctmFile = event.data;
THREE.CTMLoader.prototype.createModel( ctmFile, callback );
var e = Date.now();
console.log( "CTM data parse time [worker]: " + (e-s) + " ms" );
};
worker.postMessage( binaryData );
} else {
var ctmFile = new CTM.File( new CTM.Stream( binaryData ) );
THREE.CTMLoader.prototype.createModel( ctmFile, callback );
var e = Date.now();
console.log( "CTM data parse time [inline]: " + (e-s) + " ms" );
}
} else {
alert( "Couldn't load [" + url + "] [" + xhr.status + "]" );
console.error( "Couldn't load [" + url + "] [" + xhr.status + "]" );
}
......@@ -71,22 +99,16 @@ THREE.CTMLoader.prototype.load = function( url, callback ) {
};
THREE.CTMLoader.prototype.createModel = function ( data, callback ) {
THREE.CTMLoader.prototype.createModel = function ( file, callback ) {
var Model = function ( texture_path ) {
var s = (new Date).getTime();
var scope = this;
scope.materials = [];
THREE.Geometry.call( this );
var file = new CTM.File( new CTM.Stream( data ) );
console.log( file );
var normals = [],
uvs = [],
colors = [];
......@@ -112,10 +134,6 @@ THREE.CTMLoader.prototype.createModel = function ( data, callback ) {
this.computeFaceNormals();
//this.computeTangents();
var e = (new Date).getTime();
console.log( "CTM data parse time: " + (e-s) + " ms" );
function init_vertices( buffer ) {
var x, y, z, i, il = buffer.length;
......
importScripts( "lzma.js", "ctm.js" );
self.onmessage = function( event ) {
self.postMessage( new CTM.File( new CTM.Stream( event.data ) ) );
self.close();
}
......@@ -126,14 +126,32 @@
// LOADER
var c = 0, s = Date.now();
function checkTime() {
c ++;
if ( c === 3 ) {
var e = Date.now();
console.log( "Total parse time: " + (e-s) + " ms" );
}
}
var useWorker = true;
var loader = new THREE.CTMLoader();
loader.load( "ctm/ben.ctm", function( geometry ) {
var material = new THREE.MeshLambertMaterial( { color: 0xffaa00, map: THREE.ImageUtils.loadTexture( "textures/ash_uvgrid01.jpg" ), envMap: reflectionCube, combine: THREE.MixOperation, reflectivity: 0.3 } );
callbackModel( geometry, 450, material, 0, -200, 0, 0, 0 );
checkTime();
} );
}, useWorker );
loader.load( "ctm/WaltHead.ctm", function( geometry ) {
......@@ -141,15 +159,17 @@
var material = new THREE.MeshLambertMaterial( { color: 0xffffff, envMaps: reflectionCube, combine: THREE.MixOperation, reflectivity: 0.3 } );
callbackModel( geometry, 5, material, -200, 0, 0, 0, 0 );
checkTime();
});
}, useWorker );
loader.load( "ctm/LeePerry.ctm", function( geometry ) {
var material = new THREE.MeshPhongMaterial( { color: 0xffffff, specular: 0x444444, shininess: 30, map: THREE.ImageUtils.loadTexture( "obj/leeperrysmith/Map-COL.jpg" ), envMaps: reflectionCube, combine: THREE.MixOperation, reflectivity: 0.3 } );
callbackModel( geometry, 1300, material, 200, 50, 0, 0, 0 );
checkTime();
});
}, useWorker );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册