Я пытаюсь проследить луч от щелчка мыши по экрану в трехмерном пространстве. Из того, что я понимаю, положение и ориентация по умолчанию выглядит так:
из этого кода:
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY;
GLdouble near_x, near_y, near_z;
GLdouble far_x, far_y, far_z;
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );
winX = (float)mouse_x;
winY = (float)viewport[3] - (float)mouse_y;
gluUnProject(winX, winY, 0.0, modelview, projection, viewport, &near_x, &near_y, &near_z);
gluUnProject(winX, winY, 1.0, modelview, projection, viewport, &far_x, &far_y, &far_z);
У меня вопрос: как изменить положение и угол ближней и дальней плоскостей, чтобы все щелчки мышью отображались с позиции и угла камеры в трехмерном пространстве?
В частности, я ищу способ расположить центр обеих проекционных плоскостей на 65 ° ниже оси Z вдоль линии (0,0,1) -> (0,0, -tan (65 °)) [-tan (65 °) ~ = -2.145], причем ближняя и дальняя плоскости перпендикулярны линии обзора через эти точки.
У меня вопрос: как изменить положение и угол ближней и дальней плоскостей, чтобы все щелчки мышью отображались с позиции и угла камеры в трехмерном пространстве?
Подача матриц проекции и просмотра модели в gluUnProject позаботится об этом. В частности, вы передаете матрицу проекции и вида модели, используемую для рендеринга, в gluUnProject, чтобы непроецированные координаты соответствовали координатам локальной системы координат, описанной этими матрицами.
Других решений пока нет …