【问题标题】:Unity calculate quaternion relative to main cameraunity计算相对于主摄像机的四元数
【发布时间】:2019-11-12 02:11:33
【问题描述】:

我有 GameObject 对象和 Camera.main 的世界坐标,我想计算相对于 Camera.main 的位置和旋转。 定位很简单:

object.transform.position - Camera.main.transform.position

如何计算给定物体相对于相机的四元数?

我可以设置 object.transform.parent = Camera.main.transform 并读取 localRotation,但是有没有更优雅的解决方案。

【问题讨论】:

  • Transform.LookAt() 对象,然后读回旋转。
  • @3Dave 这没有回答问题。 Transform.LookAt 没有给出从一个旋转到另一个旋转的相对旋转。它提供了一个旋转,将一个变换指向另一个变换。变换的当前旋转根本不会影响Transform.LookAt 所做的更改。
  • @Ruzihm 复制Camera.main.transform,从该对象和.LookAt 对象进行新的转换。减去两个欧拉角。从中获得季铵盐是微不足道的。这里的真正问题(来自我的观点)是“相对旋转”并没有真正明确定义,但这是一种(在我看来是有效的)解释。
  • @3Dave 这通常会给出与设置object.transform.parent = Camera.main.transform; 和读取object.transform.localRotation 截然不同的结果。

标签: c# unity3d


【解决方案1】:

根据定义:

obj.transform.parent.rotation * obj.transform.localrotation = obj.transform.rotation

因此,另一种表达您的问题的方式是您想要找到四元数q 使得Camera.main.transform.rotation * q == object.transform.rotation。所以,你可以用代数方式解决这个问题:

                        cam_rotation * q = obj_rotation  
inverse(cam_rotation) * cam_rotation * q = inverse(cam_rotation) * obj_rotation  
                                       q = inverse(cam_rotation) * obj_rotation

并统一计算:

Quaternion q = Quaternion.Inverse(Camera.main.transform.rotation) 
               * object.transform.rotation;

【讨论】:

    猜你喜欢
    • 2012-08-30
    • 2014-01-09
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多