我在游戏中有两个对象,为此目的可以将其视为 2d 平面上的点,但我使用 Vector3s,因为游戏本身是 3d。
我有一个游戏摄像机,我想将其垂直(也在平面上)对齐到两个对象,以便它们都在摄像机的视野中。由于游戏的性质,对象可以处于任何可以想象的位置配置,因此它们之间的方向向量可以具有任何方向。
第 1 部分:如何从两个位置向量获取垂直角度?
我有:
Vector3 object1Position; // x and z are relevant
Vector3 object2Position;
我需要:
float cameraEulerAngleY;
第 2 部分:现在,由于游戏 Assets 的建模方式,我只想允许摄像机在 180 度“圆锥体”内进行查看。因此,如果相机经过某个点,它应该使用上述数学可能产生的完全相反的位置。
附加了我需要的图像,圆圈是物体,方框是相机。
我希望这篇文章很清楚,你们不会因为我在矢量数学上完全是垃圾而活活烧死我:P
问候, 德拉克尼尔
最佳答案
您需要指定距对象线的距离
,以及一个向上
向量:
Vector3 center = 0.5 * (object2position + object2position)
Vector3 vec12 = object2position - object1position
Vector3 normal = Cross(vec12, up)
normal.Normalize()
Vector3 offset = distance * normal
Vector3 cameraA = center + offset
Vector3 cameraB = center - offset
< choose which camera position you want >
您可能应该使用 LookAt()
之类的东西来确定相机方向,而不是使用欧拉角。
关于c# - 矢量/角度数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11723241/