我想为参数Three.js网格对象创建导出为OBJ或STL链接。 就像http://www.3dtin.com
上的导出选项一样任何建议都将受到赞赏。
答案 0 :(得分: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;
}
答案 1 :(得分:3)
写一个OBJExporter
应该很容易。只需使用OBJLoader作为参考。在几个星期内,如果当时没有人这样做,我可能会自己写一下。
答案 2 :(得分:1)
我先来看看python OBJ - &gt; three.js转换器。
除此之外,我认为您不会找到任何预先构建的库来执行此操作。我实际上会问3DTin他们是否使用了图书馆,或者他们是否在内部开发了它。
答案 3 :(得分: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;
}