在 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); 

接受的答案对我不起作用,我想出了以下解决方案:

  1. 保存:序列化camera.position和camera.rotation的x、y和z属性。

  2. 重新加载:反序列化以上6个参数。并重新分配它们,例如:

      camera.position.x = saved.position.x;
    
  3. 调用camera.updateProjectionMatrix()重新计算投影矩阵。