Не может отрисовать фигуру в openGL

Я пытался следовать примерным кодам, чтобы просто отобразить прямоугольник на черном фоне, но, похоже, он не отображался. Что я сделал

    private static void initGL(){
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); 
    glOrtho(0,Display.getWidth(),0,Display.getHeight(),-1,1);
    glMatrixMode(GL_MODELVIEW);

    glDisable(GL_DEPTH_TEST); //2D mode

    glColor3f(0.5f, 0.0f, 1.0f); 
    glBegin(GL_QUADS); 
        glVertex2f(-0.75, 0.75);
        glVertex2f(-0.75, -0.75);
        glVertex2f(0.75, -0.75);
        glVertex2f(0.75, 0.75);
    glEnd();
}

На экране ничего не отображается, кроме черного фона. Кто-нибудь знает, что я мог сделать не так? Я использую lwjgl в затмении.

2 ответа

Решение

Перво-наперво: вам нужно только запустить целое

glMatrixMode(GL_PROJECTION);
glLoadIdentity(); 
glOrtho(0,Display.getWidth(),0,Display.getHeight(),-1,1);
glMatrixMode(GL_MODELVIEW);

вещь однажды во время вашей программы, вероятно, вскоре после запуска Display.create(),

Кроме того, вы тесселяете, используя неправильные вершины. Вы написали

glVertex2f(-0.75, 0.75);
glVertex2f(-0.75, -0.75);
glVertex2f(0.75, -0.75);
glVertex2f(0.75, 0.75); 

что означает рисование прямоугольника от (-0,75, -0,75) пикселей до (0,75, 0,75) пикселей. Это слишком мало, чтобы быть замеченным. Я думаю, ты предположил glVertex2f имеет дело с долями ширины дисплея. Это не. glVertex2f имеет дело с фактическими координатами, в отличие от дробных пикселей glVertex2i (это полезно, хотите верьте, хотите нет, но помогает с плавной анимацией). Что-то вроде

glVertex2f(100F, 100F);

помещает вершину в (100, 100), и эффективно эквивалентно

glVertex2i(100, 100);

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

Что касается черного фона, LWJGL Display по умолчанию имеет черный фон, поэтому рекомендуется нарисовать четырехугольник с цветом фона, который охватывает всю ширину и высоту экрана. Один квад не будет реально влиять на вашу производительность.

glVertex2f использует те же единицы размера, что и ваш glOrtho поэтому, если ширина и высота вашего дисплея не указаны в единицах, например 10 или меньше, вы можете ничего не видеть!

Другие вопросы по тегам