Наше текущее задание требует использования старых методов фиксированного конвейера в 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).
Итак, вы должны были добавить 'glLoadIdentity()', а затем выяснили, что 'gluLookAt' выглядел в неправильном направлении? – ybungalobill
Да. Он смотрел в неправильном направлении. Если глаз находится в точке (0,0,0), а точка взгляда находится на (0,1,0), то она смотрит вниз по оси Y. Многоугольник был параллелен плоскости X/Y. Я поставил 1 в неправильном месте. – AaronF