实现视场的最佳方式

Best way to implement a field of view

本文关键字:最佳 方式 实现      更新时间:2023-10-16

我用图形渲染我的'FOV',像这样:

glBegin(GL_LINES);
glColor3f((220.0f / 255.0f), (220.0f / 255.0f), (220.0f / 255.0f));
for (int j = -2; j < 3; j++) {
    if (j == 0)continue;
    glVertex3f(0, 0, 0);
    glVertex3f((pxob->s * 3) * cos((pxob->rotating_angle * M_PI) + j * M_PI / 8), (pxob->s * 3) * sin((pxob->rotating_angle * M_PI) + j * M_PI / 8), 0);
}
glEnd();

但因为这只是图形化的,我想知道使用这个锥计算的最佳方法是什么,并使用它,所以它将迭代我的对象并"看到"FOV。

这是一个2d应用程序,使用"自顶向下"视图,所以视图将像这样

                 /
           FOV  /
               /
            __/
            |ob|

所有对象都在vector

我想我是在问实现视场的最佳方式是什么?

  • 我如何获得FOV内的所有坐标
  • 我将如何使用找出FOV中的内容是最好的迭代方法(例如)
  • 有没有更简单的方法来做这件事?
  • 我怎么知道什么对象是在另一个对象的FOV
  • 同时获取视场内物体到物体的距离

如何得到视场内的所有坐标

你不能,因为这是一个无限大小的集合。但是你能做的就是根据集合的边界写下这个集合

我如何使用坐标来找出FOV中的内容(这是迭代数组并查看是否有匹配的最佳方法)

换一种方式思考:我如何测试某个点是否是形成FOV的点集合的元素。现在你的FOV是一个圆。测试一个点是否在圆内非常简单:计算到圆心的距离,测试距离是否小于圆半径。

有更简单的方法吗?

取决于你使用的投影。

如果使用正交投影,但你想坚持一个圆形FOV,那么测试投影坐标对FOV圆半径是可行的方法。

在透视投影中,取从视点到待测点的归一化向量与归一化观察方向向量的标量积,得到与观察轴夹角的余弦。在透视投影中,FOV通常指的是一个角度。