Jedes Mal, wenn ich das Modell (SkinnedMesh) aus meiner Three.js-Szene exportiert und speichere, wird das ursprüngliche importierte Modell gespeichert. Dies passiert, obwohl ich das Modell modifiziere, indem ich einen Bone rotiere und den Wert eines Morph-Ziels ändere.Wie exportiere ich Geometrie aus einer Three.js-Szene als OBJ, die geändert wurde?
Ich habe im Konsolenfenster nach Änderungen an den Geometriedaten gesucht, und es wird angezeigt, dass die Bone- und Morph-Zielinformationen aktualisiert wurden. Aber aus irgendeinem Grund, wenn ich exportieren und speichern, wird das aktualisierte Modell nicht gespeichert.
Hier ist meine render() -Funktion, wo das Modell exportiert und als OBJ gespeichert wird.
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();
}
});
}
Hier ist ein JSFiddle all meinen Code enthält - https://jsfiddle.net/markskelton/ord9gL1a/. Ich war mir nicht sicher, wie ich mein Modell hochladen sollte, damit die Leute es mit meinem Code verwenden können.
Hey, danke für die Antwort! Scheint immer noch das Originalmodell zu exportieren. Würde Ihre Antwort für die neueste Version von Three.js gelten? – skelto
Ich habe auch einen Vergleichsvergleich für zwei OBJ-Dateien durchgeführt, die ich aus meiner Szene exportiert und gespeichert habe, eine mit dem Modell in der ursprünglichen Position und die andere mit einem geänderten Morph-Ziel. Beide OBJ-Dateien sind genau gleich. – skelto
Wurde dies gelöst? –