Canvas 将three.js网格导出为OBJ或STL

Canvas 将three.js网格导出为OBJ或STL,canvas,webgl,three.js,Canvas,Webgl,Three.js,我想为参数化Three.js网格对象创建导出为OBJ或STL链接。 就像上的导出选项一样 任何建议都将不胜感激。我将首先研究python OBJ->three.js转换器 除此之外,我认为你不会找到任何预先构建的库来实现这一点。实际上,我会问3DTin他们是使用了库还是自己开发的。编写一个对象导出器应该很容易。仅用作参考。几周后,如果当时还没有人完成,我可能会自己编写。要获得.obj格式的网格,我使用以下简单函数: THREE.saveGeometryToObj = function (geom

我想为参数化Three.js网格对象创建导出为OBJ或STL链接。 就像上的导出选项一样


任何建议都将不胜感激。

我将首先研究python OBJ->three.js转换器


除此之外,我认为你不会找到任何预先构建的库来实现这一点。实际上,我会问3DTin他们是使用了库还是自己开发的。

编写一个
对象导出器应该很容易。仅用作参考。几周后,如果当时还没有人完成,我可能会自己编写。

要获得.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;
}
THREE.saveGeometryToObj=函数(几何体){
var s='';
对于(i=0;i
我稍微调整了上面的代码,以允许在场景中复制和转换对象的数组。我目前正在使用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;
var l=parent.length;
var j=0;
而(l--){
var numVerts=父[l]。子[0]。几何体。顶点。长度;
document.writeln(三个.saveGeometryToObj(父[l].子[0],j*(numVerts));
j++;
}
THREE.SaveGeometryTobj=函数(geo,nums){
geo.updateMatrixWorld();
var num=parseInt(nums);
var s='';
对于(i=0;i';
}
对于(i=0;i

}

谢谢!我认为这将非常有用。你有一个工作的例子几何体对象,与此一起工作吗?我得到了“长度未定义”,但我试图保存一个三平面缓冲网格,所以可能对象格式不同?