3D(iOS SceneKit),切换摄像机和其他对象的变换

时间:2018-05-16 14:07:45

标签: matrix camera coordinates orientation inverse

我有一个带摄像头和另一个物体的场景:3D角色模型。

使用来自姿势估计算法的方向信息(用于平移的vec3和用于旋转的vec4四元数),我的相机的变换正在被转换并旋转以聚焦于此角色,即(0) ,0,0)和0旋转。这项工作正确而准确,但我希望“反向”。这些值使得我用输入影响角色对象,将摄像机置于0,0,0而旋转0圈。

我觉得我应该围绕原点旋转提供的相机变换矩阵来创建 myObjectTransform ,然后将相机值归零并简单地应用 myObjectTransform 作为变换角色对象。但是,如果我这样做,我的输入翻译和旋转值不会像我一样影响场景 - 旋转似乎走向错误的方向,甚至翻译位置似乎也没有。

这听起来应该很容易,但我显然遗漏了一些东西。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我使用SCNMatrix4Invert解决了这个问题 - 相机矩阵的反转正是我想要的。但是,我忘记了我在初始给定的平移和旋转时施加了180度的额外X旋转。

所以我的过程虽然有些不整洁,却是:

  1. 创建SCNMatrix4,并从姿势估计输入
  2. 设置其位置和旋转
  3. 将X轴上的矩阵旋转180度(我的自定义步骤)
  4. 反转矩阵
  5. 我也随意地缩放我的角色对象,所以我记下它的缩放矢量。
  6. 将矩阵应用为'转换'我的角色对象的SCNNode
  7. 的属性
  8. 设置#4中获得的SCNNode的比例。有很多方法可以做到这一点,例如将相同的比例应用于SCNMatrix4 - 这可能会更好地练习。