glPushMatrix, если не ошибаюсь, сохраняет текущую матрицу проекции в стеке, а glPopMatrix, соответственно, достает ее из стека и восстанавливает.
То есть можно сделать так:
<меняем матрицу проекции>
<выводим что-либо>
glPushMatrix();
<обнуляем матрицу проекции>
<опять изменяем ее>
<выводим что-либо в новых координатах, т.е. с новым значением
смещения(glTranslatef) и поворота (glRotatef)>
glPopMatrix(); // вернулись к первой матрице проекции
не очень понимаю, как с помощью этих функций можно привести в соответствие позицию мыши на экране и 3д-точку в сцене.
Хотя если у тебя получится, расскажешь, как.
P.S.: где-то видел какую-то статью на тему переноса 2д координат мыши в сцену, если найду - дам линк.