2012-07-06 74 views

回答

1

我会先看看蟒蛇OBJ - > three.js转换器。

除了这个,我不认为你会找到任何预建的库来做到这一点。我实际上会问3DTin他们是否使用过图书馆,或者他们是否在内部开发它。

3

写一个OBJExporter应该很容易。仅供参考OBJLoader。在几个星期之内,如果没有人完成,我可能会自己写。

+0

谢谢!我认为这将非常有用。 – user1507511 2012-07-07 18:09:05

7

要获得.OBJ格式的我用这个简单的功能网:

THREE.saveGeometryToObj = function (geometry) { 
var s = ''; 
for (i = 0; i < geometry.vertices.length; i++) { 
    s+= 'v '+(geometry.vertices[i].x) + ' ' + 
    geometry.vertices[i].y + ' '+ 
    geometry.vertices[i].z + '\n'; 
} 

for (i = 0; i < geometry.faces.length; i++) { 

    s+= 'f '+ (geometry.faces[i].a+1) + ' ' + 
    (geometry.faces[i].b+1) + ' '+ 
    (geometry.faces[i].c+1); 

    if (geometry.faces[i].d !== undefined) { 
     s+= ' '+ (geometry.faces[i].d+1); 
    } 
    s+= '\n'; 
} 

return s; 
} 
+0

你有一个工作示例几何对象,与此一起工作吗?我得到'长度未定义',但我试图保存一个三平面缓冲网格,所以也许对象格式是不同的? – 2015-01-21 14:49:47

0

我调整了上面的代码略,以便对已经被复制和场景中围绕翻译对象的数组。我目前正在使用document.writeln,然后手动复制并粘贴到文档中。

var l = parent.length; 
var j = 0; 

while (l--) { 

var numVerts = parent[l].children[0].geometry.vertices.length; 
document.writeln(THREE.saveGeometryToObj(parent[l].children[0],j*(numVerts)));  

j++; 
} 

THREE.saveGeometryToObj = function (geo,nums) { 

geo.updateMatrixWorld(); 
var num = parseInt(nums); 
var s = ''; 

for (i = 0; i < geo.geometry.vertices.length; i++) { 

    var vector = new THREE.Vector3(geo.geometry.vertices[i].x, geo.geometry.vertices[i].y, geo.geometry.vertices[i].z); 
    geo.matrixWorld.multiplyVector3(vector); 


    s+= 'v '+(vector.x) + ' ' + 
    vector.y + ' '+ 
    vector.z + '</br>'; 
} 

for (i = 0; i < geo.geometry.faces.length; i++) { 

    s+= 'f '+ (geo.geometry.faces[i].a+1+num) + ' ' + 
    (geo.geometry.faces[i].b+1+num) + ' '+ 
    (geo.geometry.faces[i].c+1+num); 

    if (geo.geometry.faces[i].d!==undefined) { 
     s+= ' '+ (geo.geometry.faces[i].d+1+num); 
    } 
    s+= '</br>'; 
} 

return s; 

}