【问题标题】:3D (iOS SceneKit), switch transforms of camera and another object3D(iOS SceneKit),相机和另一个对象的切换变换
【发布时间】:2018-10-26 15:24:02
【问题描述】:

我有一个带有相机和另一个对象的场景:一个 3D 角色模型。

使用来自姿势估计算法的方向信息(一个 vec3 用于平移,一个 vec4 四元数用于旋转)我的相机的变换被平移和旋转以聚焦在 (0,0,0 ) 和 0 旋转。这可以正确且精确地工作,但我想“反转”这些值,以便我通过输入影响角色对象,将相机放置在 0,0,0 处,而不是 0 旋转。

我觉得我应该围绕原点旋转提供的相机变换矩阵以创建 myObjectTransform,然后将相机值归零并简单地应用 myObjectTransform 作为人物对象。但是,如果我这样做,我的输入平移和旋转值不会像我想要的那样影响场景 - 旋转似乎朝错误的方向前进,甚至平移位置似乎也偏离了。

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

【问题讨论】:

    标签: matrix camera coordinates orientation inverse


    【解决方案1】:

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

    所以我的过程,虽然看起来有点不整洁,是:

    1. 创建一个 SCNMatrix4,并根据姿态估计输入设置其位置和旋转
    2. 将矩阵沿 X 轴旋转 180 度(我的自定义步骤)
    3. 反转矩阵
    4. 我还随意放大了我的角色对象,所以我记下了它的缩放向量。
    5. 将矩阵应用为我的角色对象的 SCNNode 的“变换”属性
    6. 设置#4得到的SCNNode的规模。有很多方法可以做到这一点,比如对 SCNMatrix4 应用相同的比例 - 这可能会更好。

    【讨论】:

      猜你喜欢
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 2017-10-29
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      相关资源
      最近更新 更多