2016-10-26 3 views
0

Наше текущее задание требует использования старых методов фиксированного конвейера в openGL. Мы используем LWJGL 2.9.3. Следующий код отображает треугольник. Проблема в том, что она мерцает, как сумасшедшая. Метод Display.swapBuffers() не генерирует исключение, и это не имеет никакого значения, если я его включаю или нет. Я создал этот пример, основанный от этого StackOverflow вопрос:Мерцание на простейшем треугольном рендере в openGL

gluPerspective, glViewport, gluLookAt and the GL_PROJECTION and GL_MODELVIEW Matricies

glViewport(0, 0, Display.getWidth(), Display.getHeight()); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, 10, 0, 10, -1, 100); 

glMatrixMode(GL_MODELVIEW); 
glClear(GL_COLOR_BUFFER_BIT); 

gluLookAt(0, 0, 0, 0, 0, 1, 0, 1, 0); 
glBegin(GL_POLYGON); 
    glVertex3d(1, 1, 1); 
    glVertex3d(1, 5, 1); 
    glVertex3d(5, 5, 1); 
glEnd(); 
glFlush(); 
try { 
    Display.swapBuffers(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

EDIT

одна вещь. Если я вызову glLoadIdentity() после glMatrixMode (GL_MODELVIEW), это как если бы метод gluLookAt() игнорировался. Я просто вижу пустой черный экран, если я это сделаю. Но если я этого не делаю, он продолжает умножаться на себя (если изменить положение глаза с 0,0,0).

ответ

0

Причина для мерцания заключалась в том, что функция gluLookAt() переключалась между разными направлениями.

+0

Итак, вы должны были добавить 'glLoadIdentity()', а затем выяснили, что 'gluLookAt' выглядел в неправильном направлении? – ybungalobill

+0

Да. Он смотрел в неправильном направлении. Если глаз находится в точке (0,0,0), а точка взгляда находится на (0,1,0), то она смотрит вниз по оси Y. Многоугольник был параллелен плоскости X/Y. Я поставил 1 в неправильном месте. – AaronF

Смежные вопросы