未验证 提交 8916b4cd 编写于 作者: M Mr.doob 提交者: GitHub

Merge pull request #12726 from kaisalmen/OBJLoader2_V220

OBJLoader2 V2.2.0
......@@ -156,10 +156,9 @@
<h2>Methods</h2>
<h3>[method:null validate] ( [page:Function functionCodeBuilder], [page:Boolean forceWorkerReload], Array of [page:String libLocations], [page:String libPath], [page:LoaderSupport.WorkerRunnerRefImpl runnerImpl] )</h3>
<h3>[method:null validate] ( [page:Function functionCodeBuilder], Array of [page:String libLocations], [page:String libPath], [page:LoaderSupport.WorkerRunnerRefImpl runnerImpl] )</h3>
<div>
[page:Function functionCodeBuilder] - Function that is invoked with funcBuildObject and funcBuildSingelton that allows stringification of objects and singletons.<br>
[page:Boolean forceWorkerReload] - Force re-build of the worker code.<br>
Array of [page:String libLocations] - URL of libraries that shall be added to worker code relative to libPath.<br>
[page:String libPath] - Base path used for loading libraries.<br>
[page:LoaderSupport.WorkerRunnerRefImpl runnerImpl] - The default worker parser wrapper implementation (communication and execution). An extended class could be passed here.
......@@ -178,12 +177,6 @@
</div>
<h3>[method:null terminateWorker] ()</h3>
<div>
Terminate the worker and the code.
</div>
<h3>[method:null setCallbacks] ( [page:Function builder], [page:Function onLoad] )</h3>
<div>
[page:Function builder] - The builder function. Default is [page:LoaderSupport.Builder].<br>
......@@ -251,7 +244,7 @@
- prepareWorkers<br>
- enqueueForRun<br>
- processQueue<br>
- deregister
- tearDown
</div>
......@@ -283,7 +276,10 @@
</div>
<h3>[method:null deregister]()</h3>
<h3>[method:null tearDown]( [page:Function callbackOnFinishedProcessing] )</h3>
<div>
[page:Function callbackOnFinishedProcessing] - Function called once all workers finished processing.
</div>
<div>
Terminate all workers.
</div>
......@@ -300,6 +296,11 @@
Returns the maximum number of workers.
</div>
<h3>[method:Boolean isRunning]()</h3>
<div>
Returns if any workers are running.
</div>
<h3>[method:null setCrossOrigin]( [page:String crossOrigin] )</h3>
<div>
......@@ -543,7 +544,7 @@
<h2>Methods</h2>
<h3>[method:null isValid]( [page:Object input] )</h3>
<h3>[method:Boolean isValid]( [page:Object input] )</h3>
<div>
[page:Object input] - Can be anything
</div>
......
......@@ -7,6 +7,8 @@
if ( THREE.OBJLoader2 === undefined ) { THREE.OBJLoader2 = {} }
if ( THREE.LoaderSupport === undefined ) console.error( '"THREE.LoaderSupport" is not available. "THREE.OBJLoader2" requires it. Please include "LoaderSupport.js" in your HTML.' );
/**
* Use this class to load OBJ data from files or to parse OBJ data from an arraybuffer
* @class
......@@ -16,9 +18,10 @@ if ( THREE.OBJLoader2 === undefined ) { THREE.OBJLoader2 = {} }
*/
THREE.OBJLoader2 = (function () {
var OBJLOADER2_VERSION = '2.1.2';
var OBJLOADER2_VERSION = '2.2.0';
var LoaderBase = THREE.LoaderSupport.LoaderBase;
var Validator = THREE.LoaderSupport.Validator;
var ConsoleLogger = THREE.LoaderSupport.ConsoleLogger;
OBJLoader2.prototype = Object.create( THREE.LoaderSupport.LoaderBase.prototype );
OBJLoader2.prototype.constructor = OBJLoader2;
......@@ -126,10 +129,6 @@ THREE.OBJLoader2 = (function () {
this.workerSupport = workerSupportExternal;
this.logger = workerSupportExternal.logger;
} else {
this.terminateWorkerOnLoad = true;
}
var scope = this;
var onMaterialsLoaded = function ( materials ) {
......@@ -176,7 +175,8 @@ THREE.OBJLoader2 = (function () {
OBJLoader2.prototype.parse = function ( content ) {
this.logger.logTimeStart( 'OBJLoader2 parse: ' + this.modelName );
var parser = new Parser( this.logger );
var parser = new Parser();
parser.setLogConfig( this.logger.enabled, this.logger.debug );
parser.setMaterialPerSmoothingGroup( this.materialPerSmoothingGroup );
parser.setUseIndices( this.useIndices );
parser.setDisregardNormals( this.disregardNormals );
......@@ -239,7 +239,6 @@ THREE.OBJLoader2 = (function () {
}
}
);
if ( scope.terminateWorkerOnLoad ) scope.workerSupport.terminateWorker();
scope.logger.logTimeEnd( 'OBJLoader2 parseAsync: ' + scope.modelName );
};
var scopedOnMeshLoaded = function ( payload ) {
......@@ -257,6 +256,8 @@ THREE.OBJLoader2 = (function () {
workerCode += '/**\n';
workerCode += ' * This code was constructed by OBJLoader2 buildCode.\n';
workerCode += ' */\n\n';
workerCode += funcBuildObject( 'Validator', Validator );
workerCode += funcBuildSingelton( 'ConsoleLogger', 'ConsoleLogger', ConsoleLogger );
workerCode += funcBuildSingelton( 'LoaderBase', 'LoaderBase', LoaderBase );
workerCode += funcBuildObject( 'Consts', Consts );
workerCode += funcBuildSingelton( 'Parser', 'Parser', Parser );
......@@ -267,6 +268,7 @@ THREE.OBJLoader2 = (function () {
};
this.workerSupport.validate( buildCode, false );
this.workerSupport.setCallbacks( scopedOnMeshLoaded, scopedOnLoad );
if ( scope.terminateWorkerOnLoad ) this.workerSupport.setTerminateRequested( true );
var materialNames = {};
var materials = this.builder.getMaterials();
......@@ -330,7 +332,9 @@ THREE.OBJLoader2 = (function () {
*/
var Parser = (function () {
function Parser( logger ) {
var ConsoleLogger = THREE.LoaderSupport.ConsoleLogger;
function Parser() {
this.callbackProgress = null;
this.callbackBuilder = null;
......@@ -348,7 +352,7 @@ THREE.OBJLoader2 = (function () {
faces: 0,
doubleIndicesCount: 0
};
this.logger = logger;
this.logger = new ConsoleLogger();
this.totalBytes = 0;
this.reachedFaces = false;
};
......@@ -383,6 +387,11 @@ THREE.OBJLoader2 = (function () {
this.callbackProgress = callbackProgress;
};
Parser.prototype.setLogConfig = function ( enabled, debug ) {
this.logger.setEnabled( enabled );
this.logger.setDebug( debug );
};
Parser.prototype.configure = function () {
this.rawMesh = new RawMesh( this.materialPerSmoothingGroup, this.useIndices, this.disregardNormals );
......@@ -1359,6 +1368,7 @@ THREE.OBJLoader2 = (function () {
* @param {string} [crossOrigin] CORS value
*/
OBJLoader2.prototype._loadMtl = function ( resource, callbackOnLoad, crossOrigin ) {
if ( THREE.MTLLoader === undefined ) console.error( '"THREE.MTLLoader" is not available. "THREE.OBJLoader2" requires it for loading MTL files.' );
if ( Validator.isValid( resource ) ) this.logger.logTimeStart( 'Loading MTL: ' + resource.name );
var materials = [];
......
......@@ -142,12 +142,14 @@
workerCode += '/**\n';
workerCode += ' * This code was constructed by MeshSpray buildCode.\n';
workerCode += ' */\n\n';
workerCode += funcBuildObject( 'Validator', Validator );
workerCode += funcBuildSingelton( 'ConsoleLogger', 'ConsoleLogger', ConsoleLogger );
workerCode += funcBuildSingelton( 'Parser', 'Parser', Parser );
return workerCode;
};
var libs2Load = [ 'build/three.min.js' ];
this.workerSupport.validate( buildCode, false, libs2Load, '../' );
this.workerSupport.validate( buildCode, libs2Load, '../' );
this.workerSupport.setCallbacks( scopeBuilderFunc, scopeFuncComplete );
this.workerSupport.run(
{
......@@ -173,7 +175,9 @@
var Parser = ( function () {
function Parser( logger ) {
var ConsoleLogger = THREE.LoaderSupport.ConsoleLogger;
function Parser() {
this.sizeFactor = 0.5;
this.localOffsetFactor = 1.0;
this.globalObjectCount = 0;
......@@ -181,10 +185,16 @@
this.dimension = 200;
this.quantity = 1;
this.callbackBuilder = null;
this.logger = logger;
this.callbackProgress = null;
this.logger = new ConsoleLogger();
this.serializedMaterials = null;
};
Parser.prototype.setLogConfig = function ( enabled, debug ) {
this.logger.setEnabled( enabled );
this.logger.setDebug( debug );
};
Parser.prototype.parse = function () {
var baseTriangle = [ 1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 0.0, -1.0, 1.0 ];
var vertices = [];
......@@ -389,12 +399,11 @@
var maxWebWorkers = 4;
var radius = 640;
var logger = new THREE.LoaderSupport.ConsoleLogger( false );
this.workerDirector = new THREE.LoaderSupport.WorkerDirector( MeshSpray, logger );
this.workerDirector.setCrossOrigin( 'anonymous' );
var workerDirector = new THREE.LoaderSupport.WorkerDirector( MeshSpray, logger );
workerDirector.setCrossOrigin( 'anonymous' );
var scope = this;
var callbackOnLoad = function ( event ) {
logger.logInfo( 'Worker #' + event.detail.instanceNo + ': Completed loading. (#' + scope.workerDirector.objectsCompleted + ')' );
logger.logInfo( 'Worker #' + event.detail.instanceNo + ': Completed loading. (#' + workerDirector.objectsCompleted + ')' );
};
var reportProgress = function( event ) {
document.getElementById( 'feedback' ).innerHTML = event.detail.text;
......@@ -416,7 +425,7 @@
callbacks.setCallbackOnMeshAlter( callbackMeshAlter );
callbacks.setCallbackOnLoad( callbackOnLoad );
callbacks.setCallbackOnProgress( reportProgress );
this.workerDirector.prepareWorkers( callbacks, maxQueueSize, maxWebWorkers );
workerDirector.prepareWorkers( callbacks, maxQueueSize, maxWebWorkers );
var prepData;
var pivot;
......@@ -440,9 +449,9 @@
prepData.dimension = Math.max( Math.random() * 500, 100 );
prepData.globalObjectCount = globalObjectCount++;
this.workerDirector.enqueueForRun( prepData );
workerDirector.enqueueForRun( prepData );
}
this.workerDirector.processQueue();
workerDirector.processQueue();
};
MeshSprayApp.prototype.resizeDisplayGL = function () {
......
<!DOCTYPE html>
<html lang="en">
<head>
<title>three.js webgl - WWOBJLoader2</title>
<title>three.js webgl - OBJLoader2 usage options</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
......@@ -243,6 +243,8 @@
var scope = this;
var objLoader = new THREE.OBJLoader2();
var callbackOnLoad = function ( event ) {
objLoader.workerSupport.setTerminateRequested( true );
var local = new THREE.Object3D();
local.name = 'Pivot_WaltHead';
local.position.set( -125, 50, 0 );
......@@ -257,6 +259,7 @@
var onLoadMtl = function ( materials ) {
objLoader.setModelName( modelName );
objLoader.setMaterials( materials );
objLoader.terminateWorkerOnLoad = false;
objLoader.load( 'obj/walt/WaltHead.obj', callbackOnLoad, null, null, null, true );
};
objLoader.loadMtl( 'obj/walt//WaltHead.mtl', 'WaltHead.mtl', null, onLoadMtl );
......
......@@ -113,7 +113,7 @@
this.logger = new THREE.LoaderSupport.ConsoleLogger();
this.logger.setEnabled( false );
this.workerDirector = new THREE.LoaderSupport.WorkerDirector( THREE.OBJLoader2, this.logger );
this.workerDirector = new THREE.LoaderSupport.WorkerDirector( THREE.OBJLoader2, this.logger );
this.workerDirector.setCrossOrigin( 'anonymous' );
this.controls = null;
......@@ -380,7 +380,24 @@
};
WWParallels.prototype.terminateManager = function () {
this.workerDirector.deregister();
this.workerDirector.tearDown();
this.running = false;
};
WWParallels.prototype.terminateManagerAndClearScene = function () {
var scope = this;
var scopedClearAllAssests = function (){
scope.clearAllAssests();
};
if ( this.workerDirector.isRunning() ) {
this.workerDirector.tearDown( scopedClearAllAssests );
} else {
scopedClearAllAssests();
}
this.running = false;
};
......@@ -402,8 +419,7 @@
app.terminateManager();
},
clearAllAssests: function () {
app.terminateManager();
app.clearAllAssests();
app.terminateManagerAndClearScene();
}
};
var gui = new dat.GUI( {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册