提交 8b5ad99e 编写于 作者: M Mr.doob

OBJExporter: Clean up.

上级 e7ebc61b
......@@ -16,22 +16,24 @@ THREE.OBJExporter.prototype = {
var indexVertexUvs = 0;
var indexNormals = 0;
var parseObject = function ( child ) {
var parseMesh = function ( mesh ) {
var nbVertex = 0;
var nbVertexUvs = 0;
var nbNormals = 0;
var geometry = child.geometry;
var geometry = mesh.geometry;
if ( geometry instanceof THREE.Geometry ) {
output += 'o ' + child.name + '\n';
output += 'o ' + mesh.name + '\n';
for ( var i = 0, l = geometry.vertices.length; i < l; i ++ ) {
var vertices = geometry.vertices;
var vertex = geometry.vertices[ i ].clone();
vertex.applyMatrix4( child.matrixWorld );
for ( var i = 0, l = vertices.length; i < l; i ++ ) {
var vertex = vertices[ i ].clone();
vertex.applyMatrix4( mesh.matrixWorld );
output += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\n';
......@@ -41,16 +43,19 @@ THREE.OBJExporter.prototype = {
// uvs
if (geometry.faceVertexUvs[ 0 ].length == geometry.faces.length) {
for ( var i = 0, l = geometry.faceVertexUvs[ 0 ].length; i < l; i ++ ) {
var faces = geometry.faces;
var faceVertexUvs = geometry.faceVertexUvs[ 0 ];
if ( faces.length === faceVertexUvs.length ) {
var vertexUvs = geometry.faceVertexUvs[ 0 ][ i ];
for ( var i = 0, l = faceVertexUvs.length; i < l; i ++ ) {
var vertexUvs = faceVertexUvs[ i ];
for ( var j = 0; j < vertexUvs.length; j ++ ) {
var uv = vertexUvs[ j ];
vertex.applyMatrix4( child.matrixWorld );
vertex.applyMatrix4( mesh.matrixWorld );
output += 'vt ' + uv.x + ' ' + uv.y + '\n';
......@@ -59,56 +64,57 @@ THREE.OBJExporter.prototype = {
}
}
} else {
for ( var i = 0, l = geometry.faces.length * 3; i < l; i ++ ) {
for ( var i = 0, l = faces.length * 3; i < l; i ++ ) {
output += 'vt 0 0\n';
nbVertexUvs ++;
}
}
// normals
for ( var i = 0, l = geometry.faces.length; i < l; i ++ ) {
for ( var i = 0, l = faces.length; i < l; i ++ ) {
var normals = geometry.faces[ i ].vertexNormals;
var face = faces[ i ];
var vertexNormals = face.vertexNormals;
if (normals.length == 3) {
if ( vertexNormals.length === 3 ) {
for ( var j = 0; j < normals.length; j ++ ) {
for ( var j = 0; j < vertexNormals.length; j ++ ) {
var normal = normals[ j ];
var normal = vertexNormals[ j ];
output += 'vn ' + normal.x + ' ' + normal.y + ' ' + normal.z + '\n';
nbNormals ++;
}
} else {
var normal = geometry.faces[ i ].normal;
var normal = face.normal;
for ( var j = 0; j < 3; j ++ ) {
output += 'vn ' + normal.x + ' ' + normal.y + ' ' + normal.z + '\n';
nbNormals ++;
}
}
}
}
// faces
for ( var i = 0, j = 1, l = geometry.faces.length; i < l; i ++, j += 3 ) {
for ( var i = 0, j = 1, l = faces.length; i < l; i ++, j += 3 ) {
var face = geometry.faces[ i ];
var face = faces[ i ];
output += 'f ';
output += ( indexVertex + face.a + 1 ) + '/' + ( indexVertexUvs + j ) + '/' + ( indexNormals + j ) + ' ';
......@@ -117,6 +123,11 @@ THREE.OBJExporter.prototype = {
}
} else {
console.warn( 'THREE.OBJExporter.parseMesh(): geometry type unsupported', mesh );
// TODO: Support only BufferGeometry and use use setFromObject()
}
// update index
......@@ -126,7 +137,9 @@ THREE.OBJExporter.prototype = {
};
object.traverse( parseObject );
object.traverse( function ( child ) {
if ( child instanceof THREE.Mesh ) parseMesh( child );
} );
return output;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册