提交 c745c3b5 编写于 作者: M Mugen87

OBJExporter: Correct Tab Styles

上级 b481eec0
......@@ -2,250 +2,250 @@
* @author mrdoob / http://mrdoob.com/
*/
THREE.OBJExporter = function () {};
THREE.OBJExporter = function () {};
THREE.OBJExporter.prototype = {
THREE.OBJExporter.prototype = {
constructor: THREE.OBJExporter,
constructor: THREE.OBJExporter,
parse: function ( object ) {
parse: function ( object ) {
var output = '';
var output = '';
var indexVertex = 0;
var indexVertexUvs = 0;
var indexNormals = 0;
var indexVertex = 0;
var indexVertexUvs = 0;
var indexNormals = 0;
var vertex = new THREE.Vector3();
var normal = new THREE.Vector3();
var uv = new THREE.Vector2();
var vertex = new THREE.Vector3();
var normal = new THREE.Vector3();
var uv = new THREE.Vector2();
var i, j, m, face = [];
var i, j, m, face = [];
var parseMesh = function ( mesh ) {
var parseMesh = function ( mesh ) {
var nbVertex = 0;
var nbNormals = 0;
var nbVertexUvs = 0;
var nbVertex = 0;
var nbNormals = 0;
var nbVertexUvs = 0;
var geometry = mesh.geometry;
var geometry = mesh.geometry;
var normalMatrixWorld = new THREE.Matrix3();
var normalMatrixWorld = new THREE.Matrix3();
if ( geometry instanceof THREE.Geometry ) {
if ( geometry instanceof THREE.Geometry ) {
geometry = new THREE.BufferGeometry().setFromObject( mesh );
geometry = new THREE.BufferGeometry().setFromObject( mesh );
}
}
if ( geometry instanceof THREE.BufferGeometry ) {
if ( geometry instanceof THREE.BufferGeometry ) {
// shortcuts
var vertices = geometry.getAttribute( 'position' );
var normals = geometry.getAttribute( 'normal' );
var uvs = geometry.getAttribute( 'uv' );
var indices = geometry.getIndex();
// shortcuts
var vertices = geometry.getAttribute( 'position' );
var normals = geometry.getAttribute( 'normal' );
var uvs = geometry.getAttribute( 'uv' );
var indices = geometry.getIndex();
// name of the mesh object
output += 'o ' + mesh.name + '\n';
// name of the mesh object
output += 'o ' + mesh.name + '\n';
// vertices
// vertices
if( vertices !== undefined ) {
if( vertices !== undefined ) {
for ( i = 0; i < vertices.count ; i ++, nbVertex++ ) {
for ( i = 0; i < vertices.count ; i ++, nbVertex++ ) {
vertex.x = vertices.getX( i );
vertex.y = vertices.getY( i );
vertex.z = vertices.getZ( i );
vertex.x = vertices.getX( i );
vertex.y = vertices.getY( i );
vertex.z = vertices.getZ( i );
// transfrom the vertex to world space
vertex.applyMatrix4( mesh.matrixWorld );
// transfrom the vertex to world space
vertex.applyMatrix4( mesh.matrixWorld );
// transform the vertex to export format
output += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\n';
// transform the vertex to export format
output += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\n';
}
}
}
}
// uvs
// uvs
if( uvs !== undefined ) {
if( uvs !== undefined ) {
for ( i = 0; i < uvs.count ; i ++, nbVertexUvs++ ) {
for ( i = 0; i < uvs.count ; i ++, nbVertexUvs++ ) {
uv.x = uvs.getX( i );
uv.y = uvs.getY( i );
uv.x = uvs.getX( i );
uv.y = uvs.getY( i );
// transform the uv to export format
output += 'vt ' + uv.x + ' ' + uv.y + '\n';
// transform the uv to export format
output += 'vt ' + uv.x + ' ' + uv.y + '\n';
}
}
}
}
// normals
// normals
if( normals !== undefined ) {
if( normals !== undefined ) {
normalMatrixWorld.getNormalMatrix( mesh.matrixWorld );
normalMatrixWorld.getNormalMatrix( mesh.matrixWorld );
for ( i = 0; i < normals.count ; i ++, nbNormals++ ) {
for ( i = 0; i < normals.count ; i ++, nbNormals++ ) {
normal.x = normals.getX( i );
normal.y = normals.getY( i );
normal.z = normals.getZ( i );
normal.x = normals.getX( i );
normal.y = normals.getY( i );
normal.z = normals.getZ( i );
// transfrom the normal to world space
normal.applyMatrix3( normalMatrixWorld );
// transfrom the normal to world space
normal.applyMatrix3( normalMatrixWorld );
// transform the normal to export format
output += 'vn ' + normal.x + ' ' + normal.y + ' ' + normal.z + '\n';
// transform the normal to export format
output += 'vn ' + normal.x + ' ' + normal.y + ' ' + normal.z + '\n';
}
}
}
}
// faces
// faces
if( indices !== null ) {
if( indices !== null ) {
for ( i = 0; i < indices.count ; i += 3 ) {
for ( i = 0; i < indices.count ; i += 3 ) {
for( m = 0; m < 3; m ++ ){
for( m = 0; m < 3; m ++ ){
j = indices.getX( i + m ) + 1;
j = indices.getX( i + m ) + 1;
face[ m ] = ( indexVertex + j ) + '/' + ( uvs ? ( indexVertexUvs + j ) : '' ) + '/' + ( indexNormals + j );
face[ m ] = ( indexVertex + j ) + '/' + ( uvs ? ( indexVertexUvs + j ) : '' ) + '/' + ( indexNormals + j );
}
}
// transform the face to export format
output += 'f ' + face.join( ' ' ) + "\n";
// transform the face to export format
output += 'f ' + face.join( ' ' ) + "\n";
}
}
} else {
} else {
for ( i = 0; i < vertices.count ; i += 3 ) {
for ( i = 0; i < vertices.count ; i += 3 ) {
for( m = 0; m < 3; m ++ ){
for( m = 0; m < 3; m ++ ){
j = i + m + 1;
j = i + m + 1;
face[ m ] = ( indexVertex + j ) + '/' + ( uvs ? ( indexVertexUvs + j ) : '' ) + '/' + ( indexNormals + j );
face[ m ] = ( indexVertex + j ) + '/' + ( uvs ? ( indexVertexUvs + j ) : '' ) + '/' + ( indexNormals + j );
}
}
// transform the face to export format
output += 'f ' + face.join( ' ' ) + "\n";
// transform the face to export format
output += 'f ' + face.join( ' ' ) + "\n";
}
}
}
}
} else {
} else {
console.warn( 'THREE.OBJExporter.parseMesh(): geometry type unsupported', geometry );
console.warn( 'THREE.OBJExporter.parseMesh(): geometry type unsupported', geometry );
}
}
// update index
indexVertex += nbVertex;
indexVertexUvs += nbVertexUvs;
indexNormals += nbNormals;
// update index
indexVertex += nbVertex;
indexVertexUvs += nbVertexUvs;
indexNormals += nbNormals;
};
};
var parseLine = function( line ) {
var parseLine = function( line ) {
var geometry = line.geometry;
var type = line.type;
var geometry = line.geometry;
var type = line.type;
if ( geometry instanceof THREE.Geometry ) {
if ( geometry instanceof THREE.Geometry ) {
geometry = new THREE.BufferGeometry().setFromObject( line );
geometry = new THREE.BufferGeometry().setFromObject( line );
}
}
if ( geometry instanceof THREE.BufferGeometry ) {
if ( geometry instanceof THREE.BufferGeometry ) {
// shortcuts
var vertices = geometry.getAttribute( 'position' );
var indices = geometry.getIndex();
// shortcuts
var vertices = geometry.getAttribute( 'position' );
var indices = geometry.getIndex();
// name of the line object
output += 'o ' + line.name + '\n';
// name of the line object
output += 'o ' + line.name + '\n';
if( vertices !== undefined ) {
if( vertices !== undefined ) {
for ( i = 0; i < vertices.count ; i ++ ) {
for ( i = 0; i < vertices.count ; i ++ ) {
vertex.x = vertices.getX( i );
vertex.y = vertices.getY( i );
vertex.z = vertices.getZ( i );
vertex.x = vertices.getX( i );
vertex.y = vertices.getY( i );
vertex.z = vertices.getZ( i );
// transfrom the vertex to world space
vertex.applyMatrix4( line.matrixWorld );
// transfrom the vertex to world space
vertex.applyMatrix4( line.matrixWorld );
// transform the vertex to export format
output += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\n';
// transform the vertex to export format
output += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\n';
}
}
}
}
if ( type === 'Line' ) {
if ( type === 'Line' ) {
output += 'l ';
output += 'l ';
for ( j = 1; j <= vertices.count; j++ ) {
for ( j = 1; j <= vertices.count; j++ ) {
output += j + ' ';
output += j + ' ';
}
}
output += '\n';
output += '\n';
}
}
if ( type === 'LineSegments' ) {
if ( type === 'LineSegments' ) {
for ( j = 1, k = j + 1; j < vertices.count; j += 2, k = j + 1 ) {
for ( j = 1, k = j + 1; j < vertices.count; j += 2, k = j + 1 ) {
output += 'l ' + j + ' ' + k + '\n';
output += 'l ' + j + ' ' + k + '\n';
}
}
}
}
} else {
} else {
console.warn('THREE.OBJExporter.parseLine(): geometry type unsupported', geometry );
console.warn('THREE.OBJExporter.parseLine(): geometry type unsupported', geometry );
}
}
};
};
object.traverse( function ( child ) {
object.traverse( function ( child ) {
if ( child instanceof THREE.Mesh ) {
if ( child instanceof THREE.Mesh ) {
parseMesh( child );
parseMesh( child );
}
}
if ( child instanceof THREE.Line ) {
if ( child instanceof THREE.Line ) {
parseLine( child );
parseLine( child );
}
}
} );
} );
return output;
return output;
}
}
};
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册