From 65a55a5e0c2589894588aafecc2bc1bc25f4231e Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Mon, 16 Apr 2012 19:59:48 +0200 Subject: [PATCH] Started OBJLoader. --- examples/js/loaders/OBJLoader.js | 72 +++++++++++++++++++ examples/webgl_loader_obj.html | 114 +++++++++++++++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 examples/js/loaders/OBJLoader.js create mode 100644 examples/webgl_loader_obj.html diff --git a/examples/js/loaders/OBJLoader.js b/examples/js/loaders/OBJLoader.js new file mode 100644 index 0000000000..b699be3d4b --- /dev/null +++ b/examples/js/loaders/OBJLoader.js @@ -0,0 +1,72 @@ +/** + * @author mrdoob / http://mrdoob.com/ + */ + +THREE.OBJLoader = function () {}; +THREE.OBJLoader.prototype.load = function ( url, callback ) { + + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function () { + + if ( xhr.readyState == 4 ) { + + if ( xhr.status == 200 || xhr.status == 0 ) { + + THREE.OBJLoader.prototype.parse( xhr.responseText, callback ); + + } else { + + console.error( 'THREE.OBJLoader: Couldn\'t load ' + url + ' (' + xhr.status + ')' ); + + } + + } + + }; + + xhr.open( "GET", url, true ); + xhr.send( null ); + +}; + +THREE.OBJLoader.prototype.parse = function ( data, callback ) { + + var geometry = new THREE.Geometry(); + + var objects = data.split( '\no '); + + for ( var i = 0, il = objects.length; i < il; i ++ ) { + + var object = objects[ i ]; + + var pattern, result; + + // vertices + + pattern = /v ([\-|\d|.]+) ([\-|\d|.]+) ([\-|\d|.]+)/g; + + while ( ( result = pattern.exec( object ) ) != null ) { + + var vertex = new THREE.Vector3( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) ); + geometry.vertices.push( vertex ); + + } + + // faces + + pattern = /f ([\d]+)\/([\d]+)\/([\d]+) ([\d]+)\/([\d]+)\/([\d]+) ([\d]+)\/([\d]+)\/([\d]+)/g; + + while ( ( result = pattern.exec( object ) ) != null ) { + + var face = new THREE.Face3( parseInt( result[ 1 ] ) - 1, parseInt( result[ 4 ] ) - 1, parseInt( result[ 7 ] ) - 1 ); + geometry.faces.push( face ); + + } + + } + + geometry.computeCentroids(); + + callback( geometry ); + +} diff --git a/examples/webgl_loader_obj.html b/examples/webgl_loader_obj.html new file mode 100644 index 0000000000..7477727eb3 --- /dev/null +++ b/examples/webgl_loader_obj.html @@ -0,0 +1,114 @@ + + + + three.js webgl - loaders - OBJ loader + + + + + + +
+ three.js - OBJLoader test +
+ + + + + + + + + + + -- GitLab