преобразовать координаты окна в трехмерные мировые координаты с помощью функции glutMouseFunc () - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь получить трехмерные координаты щелчка мышью C ++ / OpengGL с помощью функции glutMouseFunc ().Поэтому я создал такую ​​функцию:

void mouse(int button, int state, int x, int y){
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
    mouse_x=x;
    mouse_y=y;
    }
}

Функция получает координаты окна щелчка мышью, и я использую ее с функцией glutMouseFunc () следующим образом:

  glutMouseFunc(mouse);

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

[EDIT] Было бы проще преобразовать координаты 3D-объекта в 2D-окнокоординаты, а затем сравнить его с координатами щелчка мыши?

1 Ответ

0 голосов
/ 11 января 2012

Щелчок мыши соответствует не точке в трехмерном пространстве, а лучу.

В любом случае вы используете gluUnProject .

Если вам известна «глубина» сцены под курсором, вы можете получить трехмерную позицию щелчка, передавая глубину с помощью параметра winZ.

Если вы не знаете глубину, передайте 0.0 в параметре winZ, чтобы получить начало луча, и 1.0, чтобы получить "конец". Вы должны будете посчитать себя, если этот луч что-нибудь ударит.

...