实现视野的最佳方式

时间:2011-11-16 22:23:48

标签: c++ opengl

我以图形方式呈现我的'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“看到”。

这是一个带有“自上而下”视图的二维应用程序,因此视野将是这样的

         \        /
          \ FOV  /
           \    /
            \__/
            |ob|

所有对象都在向量中

我想我问的是实现视野的最佳方法是什么?

  • 我如何获得FOV中的所有坐标
  • 我将如何使用 coords以找出FOV中的内容(是迭代的最佳方式 通过一个数组,看看是否有匹配的例子)
  • 有更简单的方法吗?
  • 如何计算出另一个对象FOV中的对象
  • 同时获取物体到FOV内物体的距离

1 个答案:

答案 0 :(得分:0)

  

我如何获得FOV中的所有坐标

你不能,因为这是一组无限大小。但是你能做的就是记下那套边界。

  

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

相反地思考:如何测试某个点是否是构成FOV的点集的元素。现在你的FOV是一个圆圈。测试点是否在圆内是非常容易的:计算距中心点的距离,测试距离是否小于圆半径。

  

有没有更简单的方法来解决这个问题?

取决于您正在使用的投影。

如果使用正交投影,但想要坚持使用圆形FOV,则可以根据FOV圆半径测试投影坐标。

在透视投影中,将标准化矢量从视点到待测点标量乘积与标准化观察方向矢量给出角度相对于视轴的余弦。在透视投影中,FOV通常指的是角度。