Файл obj OpenGL не отображается правильно в JOGL

Я создаю простой загрузчик файлов 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();

person Andrei Bârsan    schedule 09.11.2012    source источник
comment
Во-первых, вы уверены, что все ваши лица, определенные в файле obj, являются треугольниками (Wavefront obj поддерживает произвольные размеры лица)?   -  person anthonyvd    schedule 09.11.2012
comment
@pwny да, я в этом уверен! В целях отладки я разрешаю определять только треугольные грани.   -  person Andrei Bârsan    schedule 09.11.2012
comment
Где ваш код настройки матрицы проекции и модели? Создание контекста?   -  person genpfault    schedule 09.11.2012
comment
genpfault: я обновил вопрос; Что касается создания контекста, то для этого не используется специальный код; JOGL автоматически справляется с основными задачами.   -  person Andrei Bârsan    schedule 11.11.2012


Ответы (2)


попробуйте удалить gl.glDepthFunc(GL2.GL_LESS); gl.glClearDepth(1.0d);

person olamedia    schedule 09.11.2012
comment
Это не помогло, все равно рендерится плохо - person Andrei Bârsan; 10.11.2012
comment
gl.glCullFace(GL2.GL_FRONT);? - person olamedia; 11.11.2012
comment
Ну, это делает его немного лучше, но он по-прежнему отображает только половину меша, и некоторые артефакты все еще присутствуют. - person Andrei Bârsan; 11.11.2012
comment
может нормальные векторы битые? попробуй открыть блендером и исправить нормали - person olamedia; 12.11.2012
comment
я вижу, что кролик - стандартная модель... но может быть источник неправильный... также попробуйте отключить отбраковку - person olamedia; 12.11.2012

Ну, похоже, это было вызвано глупой маленькой ошибкой в ​​моем загрузчике объектов. При синтаксическом анализе моих входных вершин он поглощал первый символ всех координат x вершин геометрии. Это не повлияло на положительные значения, так как все они были нормализованы и 0.43 = .43, но испортило все отрицательные значения, заставив их интерпретироваться как положительные.

Мне потребовалось некоторое время, чтобы понять это, но в конце концов я нашел это, и это просто показывает, что мельчайшие ошибки могут быть невероятно сложными для отслеживания.

person Andrei Bârsan    schedule 25.11.2012