【发布时间】:2016-12-12 23:53:10
【问题描述】:
每次我从我的 Three.js 场景中导出并保存模型 (SkinnedMesh) 时,都会保存原始导入的模型。即使我通过旋转骨骼和更改变形目标的值来修改模型,也会发生这种情况。
我在控制台窗口中检查了几何数据的变化,它显示骨骼和变形目标信息已更新。但是由于某种原因,当我导出并保存时,更新的模型没有保存。
这是我的 render() 函数,模型导出并保存为 OBJ。
function render() {
cube.rotation.x += guiControls.rotationX;
cube.rotation.y += guiControls.rotationY;
cube.rotation.z += guiControls.rotationZ;
spotLight.position.x = guiControls.lightX;
spotLight.position.y = guiControls.lightY;
spotLight.position.z = guiControls.lightZ;
camera.lookAt(lookAtPos);
scene.traverse(function(child){
if (child instanceof THREE.SkinnedMesh){
child.skeleton.bones[13].rotation.y = guiControls.Shoulder;
child.scale.x = guiControls.ScaleX;
child.scale.y = guiControls.ScaleY;
child.scale.z = guiControls.ScaleZ;
child.position.x = guiControls.PositionX;
child.position.y = guiControls.PositionY;
child.position.z = guiControls.PositionZ;
child.geometry.dynamic = true;
child.geometry.verticesNeedUpdate = true;
child.geometry.elementsNeedUpdate = true;
child.updateProjectionMatrix = true;
if(save){
var exporter = new THREE.OBJExporter();
var result = exporter.parse(child);
var saveData = (function () {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (data, fileName) {
var obj = data,
blob = new Blob([obj], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
saveData(result, "ModelOBJExport.obj");
save = false;
}
}
else if (child instanceof THREE.SkeletonHelper){
child.update();
}
});
}
这是一个包含我所有代码的 JSFiddle - https://jsfiddle.net/markskelton/ord9gL1a/。我不确定如何上传我的模型,以便人们可以在我的代码中使用它。
【问题讨论】:
标签: javascript three.js geometry export