Лучший способ реализовать поле зрения - PullRequest
0 голосов
/ 17 ноября 2011

Я графически отображаю мой '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  /
           \    /
            \__/
            |ob|

все объекты находятся внутри вектора

Полагаю, я спрашиваю, как лучше реализовать поле зрения?

  • Как бы получить все координаты в поле зрения
  • Как бы я использовал Координаты, чтобы узнать, что находится в поле зрения (это лучший способ итерации через массив и посмотреть, если любое совпадение, например)
  • Есть ли более простой способ сделать это?
  • Как я могу определить, какие объекты находятся внутри другого объекта FOV
  • Также получите расстояние от объекта до объектов в поле зрения

1 Ответ

0 голосов
/ 17 ноября 2011

Как бы я получил все координаты в поле зрения

Вы не можете, так как это набор бесконечного размера.Но то, что вы можете сделать, это записать этот набор по границам этого набора.

Как бы я использовал координаты, чтобы узнать, что находится в поле зрения (это лучший способ перебрать массиви посмотрите, есть ли совпадения, например)

Подумайте иначе: как я могу проверить, является ли определенная точка элементом набора точек, образующих FOV.Теперь ваш FOV - это какой-то круг.Проверить, находится ли точка внутри окружности, очень просто: вычислите расстояние от центральной точки, проверьте, меньше ли расстояние, чем радиус окружности.

Есть ли более простой способ сделать это?

Зависит от используемой вами проекции.

Если вы используете ортографическую проекцию, но хотите придерживаться кругового поля зрения, то проверка проекционной координаты по радиусу круга поля зренияto go.

В перспективной проекции, взяв нормализованный вектор от точки зрения до скалярного скалярного произведения, подлежащего проверке, с нормализованным вектором направления обзора, получаем косинус угла относительно оси обзора.В перспективной проекции FOV обычно относится к углу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...