From 80686ac01308f17a665370e7d8a3c390f22338f1 Mon Sep 17 00:00:00 2001 From: Tentone Date: Sat, 13 May 2017 23:08:58 +0100 Subject: [PATCH] Updated TDSLoader --- examples/js/loaders/TDSLoader.js | 114 +++++++++++++++++++++++++------ 1 file changed, 95 insertions(+), 19 deletions(-) diff --git a/examples/js/loaders/TDSLoader.js b/examples/js/loaders/TDSLoader.js index 652131bd5e..2d1e05b54c 100644 --- a/examples/js/loaders/TDSLoader.js +++ b/examples/js/loaders/TDSLoader.js @@ -1,10 +1,10 @@ -/** - * Autodesk 3DS threee.js file loader based on lib3ds. +/* + * Autodesk 3DS threee.js file loader, based on lib3ds. * * Loads geometry with uv and materials basic properties. * - * @author @timknip * @author @tentone + * @author @timknip */ "use strict"; @@ -12,7 +12,7 @@ THREE.TDSLoader = function(manager) { this.manager = (manager !== undefined) ? manager : THREE.DefaultLoadingManager; - this.debug = true; + this.debug = false; this.group = null; this.position = 0; @@ -179,14 +179,33 @@ THREE.TDSLoader.prototype.readMaterialEntry = function(data) } else if(next === MAT_TEXMAP) { - this.debugMessage(" Map"); + this.debugMessage(" Map (TODO ImageLoader)"); //var map = this.readMap(data); //TODO } else if(next === MAT_BUMPMAP) { - this.debugMessage(" BumpMap"); - //var bumpMap = this.readMap(data); + this.debugMessage(" BumpMap (TODO ImageLoader)"); + //TODO + } + else if(next == MAT_OPACMAP) + { + this.debugMessage(" OpacityMap (TODO ImageLoader)"); + //TODO + } + else if(next == MAT_SPECMAP) + { + this.debugMessage(" SpecularMap (TODO ImageLoader)"); + //TODO + } + else if(next == MAT_SHINMAP) + { + this.debugMessage(" ShininessrMap (TODO ImageLoader)"); + //TODO + } + else if(next == MAT_REFLMAP) + { + this.debugMessage(" RelectMap (TODO ImageLoader)"); //TODO } else @@ -241,7 +260,19 @@ THREE.TDSLoader.prototype.readMesh = function(data) var chunk = this.readChunk(data); var next = this.nextChunk(data, chunk); - var geometry = new THREE.Geometry(); + var useBufferGeometry = false; + var geometry = null; + var uvs = []; + + if(useBufferGeometry) + { + geometry = new THREE.BufferGeometry(); + } + else + { + geometry = new THREE.Geometry(); + } + var material = new THREE.MeshPhongMaterial(); var mesh = new THREE.Mesh(geometry, material); mesh.name = "mesh"; @@ -252,12 +283,28 @@ THREE.TDSLoader.prototype.readMesh = function(data) { var points = this.readWord(data); - for(var i = 0; i < points; i++) + this.debugMessage(" Vertex: " + points); + + //BufferGeometry + if(useBufferGeometry) { - geometry.vertices.push(new THREE.Vector3(this.readFloat(data), this.readFloat(data), this.readFloat(data))); + var vertices = []; + for(var i = 0; i < points; i++) + { + vertices.push(this.readFloat(data)); + vertices.push(this.readFloat(data)); + vertices.push(this.readFloat(data)); + } + geometry.addAttribute("position", new THREE.BufferAttribute(new Float32Array(vertices), 3)); + } + //Geometry + else + { + for(var i = 0; i < points; i++) + { + geometry.vertices.push(new THREE.Vector3(this.readFloat(data), this.readFloat(data), this.readFloat(data))); + } } - - this.debugMessage(" Vertex: " + points); } else if(next === FACE_ARRAY) { @@ -268,16 +315,32 @@ THREE.TDSLoader.prototype.readMesh = function(data) { var texels = this.readWord(data); - for(var i = 0; i < texels; i++) + this.debugMessage(" UV: " + texels); + + //BufferGeometry + if(useBufferGeometry) { - //geometry.faceVertexUvs[0].push(new THREE.Vector2(this.readFloat(data), this.readFloat(data))); + var uvs = []; + for(var i = 0; i < texels; i++) + { + uvs.push(this.readFloat(data)); + uvs.push(this.readFloat(data)); + } + geometry.addAttribute("uv", new THREE.BufferAttribute(new Float32Array(uvs), 2)); + } + //Geometry + else + { + uvs = []; + for(var i = 0; i < texels; i++) + { + uvs.push(new THREE.Vector2(this.readFloat(data), this.readFloat(data))); + } } - - this.debugMessage(" UV: " + texels); } else if(next === MESH_MATRIX) { - this.debugMessage(" Matrix"); + this.debugMessage(" Tranformation Matrix (TODO)"); //TODO } else @@ -287,9 +350,21 @@ THREE.TDSLoader.prototype.readMesh = function(data) next = this.nextChunk(data, chunk); } - this.endChunk(chunk); + if(!useBufferGeometry) + { + //geometry.faceVertexUvs[0][faceIndex][vertexIndex] + var faceUV = []; + for(var i = 0; i < geometry.faces.length; i++) + { + faceUV.push([uvs[geometry.faces[i].a], uvs[geometry.faces[i].b], uvs[geometry.faces[i].c]]); + } + geometry.faceVertexUvs[0] = faceUV; + + geometry.computeVertexNormals(); + } + return mesh; }; @@ -333,7 +408,7 @@ THREE.TDSLoader.prototype.readFaceArray = function(data, mesh) } else if(chunk.id === SMOOTH_GROUP) { - this.debugMessage(" Smooth Group"); + this.debugMessage(" Smooth Group (TODO)"); //TODO } else @@ -347,6 +422,7 @@ THREE.TDSLoader.prototype.readFaceArray = function(data, mesh) this.endChunk(chunk); }; + THREE.TDSLoader.prototype.readMap = function(data) { var chunk = this.readChunk(data); -- GitLab