openGL 2D местоположение щелчка мыши - PullRequest
2 голосов
/ 03 февраля 2012

Как этот вопрос о состоянии - я хочу преобразовать щелчок (2D) в координаты, относящиеся к визуализации на экране. У меня есть функция glutMouseFunc, связанная с моей функцией (ниже), но я не могу понять, какие x и y переданы - они, похоже, связаны с расстоянием в пикселях от верхнего левого угла.

Я хотел бы знать, как преобразовать x и y в мировые координаты :)

void mouse(int button, int state, int x, int y) {
  switch(button) {
  case GLUT_LEFT_BUTTON:
    printf(" LEFT ");
    if (state == GLUT_DOWN) {
        printf("DOWN\n");
        printf("(%d, %d)\n", x, y);
    }
    else 
      if (state == GLUT_UP) {
        printf("UP\n");
      }
    break;

  default:
    break;
  }
  fflush(stdout);                             // Force output to stdout
}

Ответы [ 2 ]

4 голосов
/ 05 февраля 2012
GLdouble ox=0.0,oy=0.0,oz=0.0;
void Mouse(int button,int state,int x,int y) {
  GLint viewport[4];
  GLdouble modelview[16],projection[16];
  GLfloat wx=x,wy,wz;

  if(state!=GLUT_DOWN)
    return;
  if(button==GLUT_RIGHT_BUTTON)
    exit(0);
  glGetIntegerv(GL_VIEWPORT,viewport);
  y=viewport[3]-y;
  wy=y;
  glGetDoublev(GL_MODELVIEW_MATRIX,modelview);
  glGetDoublev(GL_PROJECTION_MATRIX,projection);
  glReadPixels(x,y,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&wz);
  gluUnProject(wx,wy,wz,modelview,projection,viewport,&ox,&oy,&oz);
  glutPostRedisplay();
}

Где ox, oy, oz - ваши выходные значения

http://hamala.se/forums/viewtopic.php?t=20

1 голос
/ 03 февраля 2012

В оконной системе начало координат (0,0) находится в верхнем левом углу, а начало координат окна мира OpenGL (0,0) - в левом нижнем углу. Так что вам нужно конвертировать координаты y только так: new_y = window_height - y;

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