【问题标题】:Obtaining angle of object in relation to camera direction获取物体相对于相机方向的角度
【发布时间】:2016-04-29 17:36:43
【问题描述】:

我想要实现的是获取对象相对于相机朝向的方向的角度。 从我提供的图像中: A点:相机位置。 B 点:无论旋转如何,始终位于摄像机视野前方的参考点。 C点:有问题的对象。

获取点 B 和 C 之间的度数已经完成,但问题是我的相机的偏航(以度为单位)是根据世界空间而不是在视图(相机)空间中。这会成为问题,具体取决于相机位置当前所在的笛卡尔象限。

如何根据独立于世界空间的相机方向定义相机周围的度数?

【问题讨论】:

  • 你的理解肯定会混淆:你说世界坐标/空间就好像你在说3D空间;在这里,我们谈论的是 2D 空间 - 2D 平面 - 让这一点清楚;如果不是这样,您需要向您和我们自己澄清这一点
  • 没有必要居高临下。此外,相同的概念适用于它的 2D 或 3D,除了 2D,它是另一个实体而不是相机。世界空间与地球没有什么不同。无论你站在哪里,北总是北,西总是西,等等。但另一方面,你自己也有自己的空间。你的常数是你的前、后、左、右、上和下。但你很特别,因为相对于世界,你可以旋转。所以给定上面的img,如果你是相机并且你旋转了135度,那么C点是在你的左边还是在你的后面?后者。

标签: java c++ camera angle


【解决方案1】:

您的照片显示得不太好,因为您的相机位于世界的原点。但是,如果您将相机想象到其他地方,例如左上角,很容易看出,从原点到 B 和 C 的线之间的角度,与从原点到 B 和 C 的线之间的角度不同。相机。

首先从 B 和 C 的向量中减去相机位置,您会得到 2 个新向量,它们代表从相机到 B 和 C 的线。就好像相机是原点一样。

计算它们之间的角度将为您提供相机空间中的角度。


在伪代码中:

Vector b      // B's position
Vector c      // C's position
Vector camPos // camera's position

Vector bFromCam = (b - camPos)
Vector cFromCam = (c - camPos)

float angle = AngleBetween(bFromCam, cFromCam) // Compute the angle

我已经放弃了计算角度的实现,因为你已经知道该怎么做了。

【讨论】:

  • 但是“角度”是相对于世界还是相对于相机所面对的方向,并且该方向始终为 0 度?
  • @SpicyWeenie 嗯,它与 B 相关,即相机朝向的方向。它只是从相机到 B 的线和从相机到 C 的线之间的角度,就像在你的照片中一样。两个向量之间的角度不可能真正相对于其他东西。
  • B 只是一个虚构的参考点,用于标记相机朝向的方向,并用作获取 B 和 C 之间角度的第三个点。但 B 也具有标记什么是相同的目的相对于相机的 0 度,即相机所面对的方向。长话短说,世界空间与基本方向(N、S、E、W)没有什么不同,我试图定义的是前、左、右、后(0、270、90、180),但以度为单位。但是这个度数会随着相机旋转,0 始终是相机所面对的方向。
猜你喜欢
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多