Похоже, то, что вы хотите сделать, похоже на то, что вы делаете при рисовании 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.
person
Mongoose
schedule
22.01.2009