JOGL: странное поведение с цветным материалом для объективной модели - PullRequest
0 голосов
/ 15 января 2012

Для проекта с 3d моделью мне дали файл Autocad.Я импортировал файл в 3ds max и экспортировал его как файл .obj.Все идет нормально.Но когда я загружаю этот файл в свое приложение Jogl, у меня возникает странная проблема с цветным материалом.Точнее, посмотрите на изображения ниже.Первый - это скриншот из моего приложения, а второй - скриншот точно такого же файла, загруженного в программное обеспечение для 3D-манипуляций.

Как это выглядит:

How it looks like

Как это должно выглядеть:

How it should look like

Для простоты, в моем коде я использую треугольники, и для каждого из них у меня есть вершина, нормальная,координата текстуры.Итак, вопрос в том, чего не хватает?

gl.glNewList(1, gl.GL_COMPILE);
        for (int i = 0; i < len; i=i+3) {

            gl.glBegin(GL.GL_TRIANGLES);

            gl.glTexCoord2f(body.body_textCoords[i][0], body.body_textCoords[i][1]);
            gl.glNormal3f(body.body_normal[i][0], body.body_normal[i][1], body.body_normal[i][2]);
            gl.glVertex3f(body.body_vertex[i][0], body.body_vertex[i][1], body.body_vertex[i][2]);

            gl.glTexCoord2f(body.body_textCoords[i+1][0], body.body_textCoords[i+1][1]);
            gl.glNormal3f(body.body_normal[i+1][0], body.body_normal[i+1][1], body.body_normal[i+1][2]);
            gl.glVertex3f(body.body_vertex[i+1][0], body.body_vertex[i+1][1], body.body_vertex[i+1][2]);

            gl.glTexCoord2f(body.body_textCoords[i+2][0], body.body_textCoords[i+2][1]);
            gl.glNormal3f(body.body_normal[i+2][0], body.body_normal[i+2][1], body.body_normal[i+2][2]);
            gl.glVertex3f(body.body_vertex[i+2][0], body.body_vertex[i+2][1], body.body_vertex[i+2][2]);
            gl.glEnd();
        }
gl.glEndList();

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Просто несколько случайных вещей, которые можно попробовать:

Ваши нормы уже нормализованы? (Если нет, это может объяснить появление слишком яркого света. Включить GL_NORMALIZE для исправления)

Что произойдет, если вы отключите текстуры и просто раскрасите все в оранжевый цвет? (Всего на одну переменную меньше беспокоиться)

0 голосов
/ 15 января 2012

На основании изображения это выглядит как смесь неправильной лицевой поверхности (измените ее с помощью glCullFace) и действительно яркого света.Просмотр остальной части вашего кода для рисования будет действительно полезен.

...