提交 80686ac0 编写于 作者: T Tentone

Updated TDSLoader

上级 984cc7ae
/**
* 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 <ADD CODE HERE>
}
else if(next === MAT_BUMPMAP)
{
this.debugMessage(" BumpMap");
//var bumpMap = this.readMap(data);
this.debugMessage(" BumpMap (TODO ImageLoader)");
//TODO <ADD CODE HERE>
}
else if(next == MAT_OPACMAP)
{
this.debugMessage(" OpacityMap (TODO ImageLoader)");
//TODO <ADD CODE HERE>
}
else if(next == MAT_SPECMAP)
{
this.debugMessage(" SpecularMap (TODO ImageLoader)");
//TODO <ADD CODE HERE>
}
else if(next == MAT_SHINMAP)
{
this.debugMessage(" ShininessrMap (TODO ImageLoader)");
//TODO <ADD CODE HERE>
}
else if(next == MAT_REFLMAP)
{
this.debugMessage(" RelectMap (TODO ImageLoader)");
//TODO <ADD CODE HERE>
}
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 <ADD CODE HERE>
}
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 <ADD CODE HERE>
}
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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册