Похоже, то, что вы хотите сделать, похоже на то, что вы делаете, когда рисуете 2D HUD в простой игре, или просто постоянный фон. Я не эксперт, но я сделал это сравнительно недавно. То, что вы хотите сделать, это изменить матрицу проекции на ортогональную проекцию, визуализировать ваш квад, а затем переключиться обратно на ту проекцию, которая была у вас раньше. Вы можете сделать это с матричным стеком, и он полностью независим от любой камеры.
Итак, сначала:
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
int w = glutGet(GLUT_WINDOW_WIDTH);
int h = glutGet(GLUT_WINDOW_HEIGHT);
gluOrtho2D(0, w, h, 0);
Это помещает новую матрицу проекции в стек проекций (я использовал перенасыщение для этого проекта, но он должен был быть переведен в обычный OpenGL). Затем я получаю ширину и высоту окна и использую gluOrtho2D для настройки моей орфографической проекции.
Далее:
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
// Draw your quad here in screen coordinates
Здесь я просто вставляю новую чистую матрицу в вид модели. Возможно, вам не нужно это делать.
И наконец:
glPopMatrix() // Pops the matrix that we used to draw the quad
glMatrixMode(GL_PROJECTION);
glPopMatrix(); // Pops our orthographic projection matrix, which restores the old one
glMatrixMode(GL_MODELVIEW); // Puts us back into GL_MODELVIEW since this is probably what you want
Надеюсь, это поможет. Как вы можете сказать, это не требует использования положения глаз. Это происходит главным образом потому, что когда мы используем новую ортографическую проекцию, которая идеально подходит к нашему окну, это не имеет значения. Однако это может не поставить ваш четырехугольник сзади, если он выполняется после других вызовов отрисовки.
РЕДАКТИРОВАТЬ: отключение тестирования глубины и очистка буфера глубины также могут помочь, как предлагает Boojum.