c# - 矢量/角度数学

标签 c# math vector unity-game-engine angle

我在游戏中有两个对象,为此目的可以将其视为 2d 平面上的点,但我使用 Vector3s,因为游戏本身是 3d。

我有一个游戏摄像机,我想将其垂直(也在平面上)对齐到两个对象,以便它们都在摄像机的视野中。由于游戏的性质,对象可以处于任何可以想象的位置配置,因此它们之间的方向向量可以具有任何方向。

第 1 部分:如何从两个位置向量获取垂直角度?

我有:

Vector3 object1Position; // x and z are relevant
Vector3 object2Position;

我需要:

float cameraEulerAngleY;

第 2 部分:现在,由于游戏 Assets 的建模方式,我只想允许摄像机在 180 度“圆锥体”内进行查看。因此,如果相机经过某个点,它应该使用上述数学可能产生的完全相反的位置。

附加了我需要的图像,圆圈是物体,方框是相机。

example cases

我希望这篇文章很清楚,你们不会因为我在矢量数学上完全是垃圾而活活烧死我: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/

相关文章:

javascript - 使用 $.ajax (MVC 4) 将数据传递给 Controller

c# - 如何知道电脑重启了

python - Python 中立方根的错误值

c++ - 在 C++ 中通过指针和引用传递 vector

c# - Parallel.For 与 for 循环

c# - 我如何对 wpf 应用程序中从 sleep 模式唤醒的窗口使用react?

html - 在 CSS、HTML 或 Javascript 中创建可自定义的计数函数?

java - 一种更有效的口头算术/字母算术方法?

arrays - 如何将标量传递给 Fortran 子程序的向量(一维数组)?

c++ - 使用 for_each 函数显示每个容器元素