C++ 实现视野的最佳方式

C++ 实现视野的最佳方式,c++,opengl,C++,Opengl,我以图形方式呈现我的“视野”,如下所示: 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_a

我以图形方式呈现我的“视野”,如下所示:

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中的内容(这是迭代的最佳方式 通过数组查看是否有匹配项(例如)
  • 有没有更简单的方法
  • 如何计算出另一个对象FOV中的对象
  • 还可以获取从对象到FOV内对象的距离
我如何在FOV内获得所有坐标

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

如何使用coords找出FOV中的内容(例如,迭代数组并查看是否有匹配项的最佳方法)

反过来想:我如何测试某个点是否是构成视场的一组点的元素。现在你的视野是一个圆。测试一个点是否在圆内非常容易:计算到圆心的距离,测试距离是否小于圆半径

有没有更简单的方法

取决于您使用的投影

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

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

按下贴子下标记为“编辑”的链接以更新它。另外,如何渲染FOV?您所说的“实现视野”是什么意思?
         \        /
          \ FOV  /
           \    /
            \__/
            |ob|