Я создаю простой загрузчик файлов Wavefront Obj и средство визуализации на Java, используя JOGL. Однако всякий раз, когда я загружаю простую тестовую сетку кролика, она рендерится с ошибками, и я понятия не имею, что может быть причиной этого. Я просто использую геометрические вершины и нормали, никаких текстур или материалов.
Ниже приведен код инициализации GL из метода init()
:
gl.setSwapInterval(1);
gl.glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
gl.glEnable(GL2.GL_DEPTH_TEST);
gl.glDepthFunc(GL2.GL_LESS);
gl.glEnable(GL2.GL_CULL_FACE);
gl.glCullFace(GL2.GL_BACK);
gl.glShadeModel(GL2.GL_SMOOTH);
gl.glClearDepth(1.0d);
И это метод, который я использую для рендеринга модели (на данный момент фиксированный конвейер):
gl.glBegin(GL2.GL_TRIANGLES);
for(Face face : master.faces) {
for(int i = 0; i < face.points.length; i++) {
gl.glNormal3f(face.normals[i].x, face.normals[i].y, face.normals[i].z);
gl.glVertex3f(face.points[i].x, face.points[i].y, face.points[i].z);
}
}
gl.glEnd();
Где master
– основная "группа", содержащая все грани и вершины. Я проверил - все идет в основную группу, и glNormal3f и glVertex3f вызываются для каждой нужной вершины в каждом треугольнике.
Может кто подскажет из-за чего такие глюки?
Редактировать 1:
Вот код, который я использую для установки матриц проекции и модели:
float aspect = (float) width / (float) height;
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(60.0f, aspect, 0.01f, 100.0f);
glu.gluLookAt(2.0f, 1.0f, 1.5f,
0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();