OpenGL: Выберите, какое лицо будет впереди? - PullRequest
0 голосов
/ 18 сентября 2010

Я новичок в OpenGL. Я использую Java / JOGL.

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

Я думал, что эта строка кода в моем методе display() заставит нарисовать все полигональные грани, но это не дало эффекта:

gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GLU.GLU_LINE);

Используя это, я могу показать, какие стороны отображаются:

gl.glFrontFace(GL.GL_CW);

но половина моих полировок обращена в одну сторону, а половина - в другую, поэтому только половина из них визуализируется.

Я пытался использовать gl.glNormal3f() для установки нормального значения, надеясь, что это будет иметь какое-то отношение к «фронту», но это не дало никакого эффекта.

Что я должен здесь делать?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 18 сентября 2010

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

glFrontFace устанавливает, какое направление считается передним. Убедитесь, что все ваши вершины определены в одинаковом порядке, если смотреть со стороны, которая должна быть передней.

2 голосов
/ 18 сентября 2010

Может быть, у вас включен отбор.Если вы отключите его с помощью

glDisable(GL_CULL_FACE);

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

...