Проекция и отбраковка экрана объединены - PullRequest
1 голос
/ 14 сентября 2010

В настоящее время я имею дело с несколькими тысячами ящиков, которые я хотел бы проецировать на экран, чтобы определить их размеры и расстояние до камеры.

Мой текущий подход состоит в том, чтобы получить сферу, представляющую прямоугольник и проект, используя матрицы вида и проекции и значения области просмотра.

// PSEUDOCODE

// project box center from world into viewspace
boxCenterInViewSpace = viewMatrix * boxCenter;

// get two points left and right of center
leftPoint = boxCenter - radius;
right = boxCenter + radius;

// project points from view into eye space
leftPoint = projectionMatrix * leftPoint;
rightPoint = projectionMatrix * rightPoint;

// normalize points
leftPoint /= leftPoint.w;
rightPoint /= rightPoint.w;

// move to 0..1 range
leftPoint = leftPoint * 0.5 + 0.5;
rightPoint = rightPoint * 0.5 + 0.5;

// scale to viewport
leftPoint.x = leftPoint.x * viewPort.right + viewPort.left;
leftPoint.y = leftPoint.y * viewPort.bottom + viewPort.top;

rightPoint.x = rightPoint.x * viewPort.right + viewPort.left;
rightPoint.y = rightPoint.y * viewPort.bottom + viewPort.top;

// at this point i check if the node is visible on screen by comparing the points to the viewport

// calculate size
length(rightPoint - leftPoint)

В другой точке я вычисляю расстояние от коробки до камеры.

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

float getSizeOfSphereProjectedOnScreen(vec3 midpoint, float radius)

Другой вопрос проще: в координатном пространстве координата z соответствует расстоянию до камеры?

Подводя итог, хочу вычислить:

  1. Коробка в поле зрения?
  2. Какой размер ящика на экране?
  3. Каково расстояние от Box до камеры?

Чтобы упростить вычисления, я хотел бы использовать для этого представление сферы, но я не знаю, как спроектировать сферу.

1 Ответ

0 голосов
/ 15 сентября 2010

[Обновлено]

Каково расстояние от Box до камеры?

В [каком] координатном пространстве находится координата z, соответствующая расстояниюк камере?

Ответ не из обычных пробелов.Самый близкий будет в пространстве вида (то есть после того, как вы примените матрицу вида, но не матрицу проекции).В пространстве обзора расстояние до камеры должно быть sqrt(x*x + y*y + z*z), поскольку камера находится в исходной точке.(z было бы разумным приближением, только если | x | и | y | были действительно малы по сравнению с | z |.) Это предполагает, что знание расстояния от камеры до центра коробки является хорошимдостаточно.

Я думаю, что если вы действительно хотите пространство, в котором координата z соответствует расстоянию до камеры, вам необходимо сопоставить сферическое местоположение точек sqrt(x*x + y*y + z*z) = d с плоскостью z = d.Я не знаю, что вы можете сделать это с помощью матрицы.

  • Является ли Box в усеченной области просмотра?
  • Каков размер Box на экране?

Я думаю, что вы на правильном пути с этим, но в зависимости от того, в каком направлении направлена ​​камера, ваши левая и правая точки могут не определять, насколько широким выглядит окно иликоробка пересекает усеченный вид.Смотрите мой ответ на ваш другой вопрос , чтобы узнать, как это сделать.

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