OpenGL:从当前视图区域中选择所有点

时间:2010-09-01 12:04:27

标签: c++ opengl

我使用gluUnProject()获取3d世界坐标中的屏幕2d坐标。我从屏幕的每个角落取4个位置来获得可见物体的区域。

如何检查“矩形”内的哪些点?我不知道这些术语或任何内容。下图显示了“矩形”的样子:

alt text

1 个答案:

答案 0 :(得分:0)

您是否想要找到相机可见的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
  }
}