OpenGL: выбор всех точек в текущей области просмотра - PullRequest
0 голосов
/ 01 сентября 2010

Я использую gluUnProject (), чтобы получить 2d координату экрана в трехмерной мировой координате. Я беру 4 позиции с каждого угла экрана, чтобы получить область видимых объектов.

Как проверить, какие точки находятся внутри этого "прямоугольника"? Я понятия не имею о терминах или о чем-либо. Изображение ниже показывает, как выглядит этот «прямоугольник»:

alt text

1 Ответ

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

Вы пытаетесь определить, какая 3D-точка видна с камеры? Если это так, вы можете найти интересную информацию на этом сайте: http://www.lighthouse3d.com/opengl/viewfrustum/.

На следующем изображении мы видим усеченный вид и усеченный элемент (выделен красным). Применение проверок видимости усеченного конуса к выбранному усечению должно соответствовать алгоритму, выбранному для отбраковки усеченного конуса.

alt text

Если вы хотите быстрое и неоптимизированное решение:

GLdouble model_view[16];
glGetDoublev(GL_MODELVIEW_MATRIX, model_view);

GLdouble projection[16];
glGetDoublev(GL_PROJECTION_MATRIX, projection);

GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);

for(unsigned i=0; i<points.size(); ++i){
  GLdouble winX, winY, winZ;
  gluProject(points[i].x, points[i].y, points[i].z, model_view, projection, viewport, &winX, &winY, &winZ);
  if(selectionMinX <= winX && winX <= selectionMaxX && selectionMinY <= winY && winY <= selectionMaxY && winZ>=0 && winZ<=1){
    /// point is selected
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...