2013-06-12 5 views
2

Я стараюсь, чтобы луч был прослежен от щелчка мышью на экране в 3D-пространстве. Из того, что я понимаю, положение и ориентация по умолчанию выглядит следующим образом:Как переориентировать ближнюю и дальнюю плоскости от 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, чтобы непроектированные координаты совпадали с проекцией локальной системы координат, описанной этими матрицами.

+0

О, Боже мой! Огромное спасибо!!! Вы только указали мне в правильном направлении, чтобы исправить ошибку, которая преследовала меня в течение последних 5 часов! У меня была glLoadIdentity, но не последующая матричная манипуляция (я не знал, что вам это нужно), поэтому никакой матер, что я сделал на обоих самолетах, всегда был сосредоточен на происхождении! Я не могу тебя отблагодарить! –

+0

Разве я упоминал, что весь мой проект стоял на месте из-за этой ошибки? Вот как вы мне помогли! Спасибо! –