2016-12-22 11 views
0

Я пытаюсь отобразить прямоугольник на экране. Когда программа запускается, появляется только четкий цвет и нет прямоугольника.OpenGL 2d прямоугольник не отображается

Вот код:

glClearColor(0.0, 0.0, 0.0, 0.0); 
glViewport(0, 0, 1280, 720); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, 1280, 720, 0, -10, 10); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT || GL_DEPTH_BUFFER_BIT); //Clear the screen and depth buffer 

int x = 100; 
int y = 100; 
while (!glfwWindowShouldClose(window)) { 
    glfwPollEvents(); 

    glBegin(GL_QUADS); 
     glVertex2f(x, y); 
     glVertex2f(x + 10, y); 
     glVertex2f(x + 10, y + 10); 
     glVertex2f(x, y + 10); 
    glEnd(); 

    gsm->update(); 
    gsm->render(); 

    glfwSwapBuffers(window); 
} 
+0

'' GL_COLOR_BUFFER_BIT' & GL_DEPTH_BUFFER_BIT' являются bitflags, вам нужно побитовое ИЛИ их ('|') вместе, а не логическое ИЛИ ('' ||). – genpfault

ответ

1

Он получил забито. У вас была инвертированная ось Y с вашей проекцией, давая дно = 720 больше, чем верхняя. Ваш квад против часовой стрелки в ваших локальных координатах, но в нормализованных координатах он по часовой стрелке. Помните, матрица проекции является частью глобальной матрицы преобразования! Теперь, если это состояние по умолчанию, то из этих двух направлений намотки enter image description here

GL_CCW является фактическим, считается «фронтом». По умолчанию OpenGL отбирает треугольники с режимом glCullFace (GL_BACK), а квадрат внутри рассматривается как пара треугольников).

Либо изменить порядок вершин

glBegin(GL_QUADS); 
    glVertex2f(x, y); 
    glVertex2f(x, y + 10); 
    glVertex2f(x + 10, y + 10); 
    glVertex2f(x + 10, y); 
glEnd(); 

или изменить режим выбраковки, чтобы соответствовать леворукость вашей системы координат или отключить выбраковки.

Смотрите также: 1. https://www.khronos.org/opengl/wiki/Viewing_and_Transformations 2. Ответ на Is OpenGL coordinate system left-handed or right-handed?