Serialization 在3JS中序列化摄影机状态

Serialization 在3JS中序列化摄影机状态,serialization,3d,three.js,Serialization,3d,Three.js,在ThreeJS场景中序列化(或保存或封送)摄影机的状态,然后稍后取消序列化(或加载或解组)摄影机的最佳方式是什么 现在,我正在保存相机位置、向上和(欧拉角度)旋转字段的x、y、z坐标。稍后,我尝试通过调用position.set(),up.set(),和rotation.set(),来恢复此相机,然后调用updateprojectMatrix()。我假设序列化和取消序列化时默认的Euler角度旋转顺序相同 这是否正确?我建议改为存储相机的矩阵。这包括摄影机上的整个变换,包括位置、旋转和缩放 序

在ThreeJS场景中序列化(或保存或封送)摄影机的状态,然后稍后取消序列化(或加载或解组)摄影机的最佳方式是什么

现在,我正在保存相机位置、向上和(欧拉角度)旋转字段的x、y、z坐标。稍后,我尝试通过调用
position.set()
up.set()
,和
rotation.set()
,来恢复此相机,然后调用
updateprojectMatrix()
。我假设序列化和取消序列化时默认的Euler角度旋转顺序相同


这是否正确?

我建议改为存储相机的矩阵。这包括摄影机上的整个变换,包括位置、旋转和缩放

序列化:

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); 
反序列化:

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.updateProjectMatrix()
    重新计算投影矩阵


  • 我需要将序列化的矩阵存储在数据库中,您对矩阵的近似大小有什么建议吗?