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