C# 单位计算相对于主摄影机的四元数

C# 单位计算相对于主摄影机的四元数,c#,unity3d,C#,Unity3d,我有GameObject和Camera.main的世界坐标,我想计算相对于Camera.main的位置和旋转。 位置很简单: object.transform.position-Camera.main.transform.position 如何计算给定对象相对于相机的四元数 我可以设置object.transform.parent=Camera.main.transform并读取localRotation,但还有更优雅的解决方案。根据定义: 因此,问题的另一种措辞方式是,您希望找到四元数q,以便

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

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

如何计算给定对象相对于相机的四元数

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

根据定义:

因此,问题的另一种措辞方式是,您希望找到四元数
q
,以便
Camera.main.transform.rotation*q==object.transform.rotation
。所以,你可以用代数的方法来解决这个问题:

并统一计算:

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

Transform.LookAt()
对象,然后读回旋转。@3保存不回答问题的内容<代码>变换。注视不会给出从一个旋转到另一个旋转的相对旋转。它给出一个旋转,使一个变换指向另一个变换。变换的当前旋转根本不影响
Transform.LookAt
所做的更改。@Ruzihm Copy
Camera.main.Transform
,从中进行新变换,然后
。LookAt
对象。减去两个欧拉角。从中获取quat是微不足道的。这里真正的问题(从我的观点来看)是“相对旋转”并不是很明确的定义,但这是一种(在我看来是有效的)解释。@3Dave通常给出与设置
object.transform.parent=Camera.main.transform非常不同的结果和读取
对象.transform.localRotation
                        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;