在 ThreeJS 中序列化相机状态
Serializing Camera State in ThreeJS
在 ThreeJS 场景中序列化(或保存或整理)相机状态,然后再反序列化(或加载或解组)相机的最佳方法是什么?
现在我正在保存相机位置、向上和(欧拉角)旋转场的 x、y、z 坐标。稍后我尝试通过调用 position.set()
、up.set()
和 rotation.set()
来恢复此相机,然后调用 updateProjectionMatrix()
。我假设默认的欧拉角旋转顺序在序列化和反序列化时是相同的。
这是正确的吗?
我建议改为存储相机的矩阵。这包括相机上的整个变换,包括位置、旋转和缩放。
序列化:
const cameraState = JSON.stringify(camera.matrix.toArray());
// ... store cameraState somehow ...
反序列化:
// ... read cameraState somehow ...
camera.matrix.fromArray(JSON.parse(cameraState));
// Get back position/rotation/scale attributes
camera.matrix.decompose(camera.position, camera.quaternion, camera.scale);
接受的答案对我不起作用,我想出了以下解决方案:
保存:序列化camera.position和camera.rotation的x、y和z属性。
重新加载:反序列化以上6个参数。并重新分配它们,例如:
camera.position.x = saved.position.x;
调用camera.updateProjectionMatrix()
重新计算投影矩阵。
在 ThreeJS 场景中序列化(或保存或整理)相机状态,然后再反序列化(或加载或解组)相机的最佳方法是什么?
现在我正在保存相机位置、向上和(欧拉角)旋转场的 x、y、z 坐标。稍后我尝试通过调用 position.set()
、up.set()
和 rotation.set()
来恢复此相机,然后调用 updateProjectionMatrix()
。我假设默认的欧拉角旋转顺序在序列化和反序列化时是相同的。
这是正确的吗?
我建议改为存储相机的矩阵。这包括相机上的整个变换,包括位置、旋转和缩放。
序列化:
const cameraState = JSON.stringify(camera.matrix.toArray());
// ... store cameraState somehow ...
反序列化:
// ... read cameraState somehow ...
camera.matrix.fromArray(JSON.parse(cameraState));
// Get back position/rotation/scale attributes
camera.matrix.decompose(camera.position, camera.quaternion, camera.scale);
接受的答案对我不起作用,我想出了以下解决方案:
保存:序列化camera.position和camera.rotation的x、y和z属性。
重新加载:反序列化以上6个参数。并重新分配它们,例如:
camera.position.x = saved.position.x;
调用
camera.updateProjectionMatrix()
重新计算投影矩阵。