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


person zzelman    schedule 12.06.2013    source источник


Ответы (1)


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

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

person datenwolf    schedule 12.06.2013
comment
О мой Бог! Большое спасибо!!! Вы только что указали мне правильное направление для исправления ошибки, которая преследовала меня последние 5 часов! У меня был glLoadIdentity, но не последующие манипуляции с матрицей (я не знал, что вам это нужно), поэтому независимо от того, что я делал, обе плоскости всегда центрировались в начале координат! Я не могу тебя отблагодарить! - person zzelman; 13.06.2013
comment
Я упоминал, что весь мой проект остановился из-за этой ошибки? Вот как ты мне только что помог! Благодарю вас! - person zzelman; 13.06.2013