Как переориентировать ближнюю и дальнюю плоскости из gluUnProject для учета положения и угла камеры?

Я пытаюсь проследить луч от щелчка мыши по экрану в трехмерном пространстве. Из того, что я понимаю, положение и ориентация по умолчанию выглядит так:

gluUnprojection

из этого кода:

    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], причем ближняя и дальняя плоскости перпендикулярны линии обзора через эти точки.

2

Решение

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

Подача матриц проекции и просмотра модели в gluUnProject позаботится об этом. В частности, вы передаете матрицу проекции и вида модели, используемую для рендеринга, в gluUnProject, чтобы непроецированные координаты соответствовали координатам локальной системы координат, описанной этими матрицами.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]