GL_CULL_FACE заставляет все объекты исчезать - PullRequest
2 голосов
/ 23 марта 2012

Я пытаюсь создать несколько простых полигонов в openGL3.3. У меня есть 2 типа объектов со следующими свойствами:

Объект 1 - 10 вершин (перечислены ниже, в порядке), сохраненных в GL_ARRAY_BUFFER и использующих GL_TRIANGLE_FAN

v x y z w  
v 0.0 0.0 1.0 1.0  
v 0.0 1.0 0.1 1.0  
v 0.71 0.71 0.1 1.0  
v 1.0 0.0 0.1 1.0  
v 0.71 -0.71 0.1 1.0  
v 0.0 -1.0 0.1 1.0  
v -0.71 -0.71 0.1 1.0  
v -1.0 0.0 0.1 1.0  
v -0.71 0.71 0.1 1.0  
v 0.0 1.0 0.1 1.0  

Объект 2 - 4 вершины (перечислены ниже, по порядку), хранящиеся в GL_ARRAY_BUFFER и использующие GL_TRIANGLE_STRIP

v x y z w  
v 0.0 0.0 0.0 1.0  
v 0.0 1.0 0.0 1.0  
v 1.0 0.0 0.0 1.0  
v 1.0 1.0 0.0 1.0  

Я загружаю 64 Object1 и 4 Object2. Объекты 2 масштабируются с использованием glm::scale(20, 20, 0).

Когда я пытаюсь отобразить их с отключенным GL_CULL_FACE, но с включенным GL_DEPTH_TEST с glDepthFunc(GL_LESS) все работает нормально. Как только я пытаюсь включить GL_CULL_FACE, я получаю только пустое окно.

Некоторая другая полезная информация:
- Порядок рендеринга = 4 объекта2, за которыми следуют 64 объекта1
- Камера - glm::lookAt(glm::vec3(0.0f, 0.0f, 50.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
- Перспектива - glm::perspective(45.0f, 16.0f / 9.0f, 0.01f, 1000.0f);

Я пытался выяснить, почему GL_CULL_FACE не работает последние пару дней, но понятия не имею. Любая помощь очень ценится.

Ответы [ 2 ]

4 голосов
/ 23 марта 2012

Это почти всегда из-за нормального направления многоугольника (правое правило трех вершин каждого треугольника)

Попробуйте изменить направление с помощью:

glCullFace (GL_BACK или GL_FRONT)

Еще немного чтения здесь

3 голосов
/ 23 марта 2012

Какое направление выбраковки вы указали?Когда вы создаете многоугольник, вы «наматываете» вершины либо по часовой стрелке, либо против часовой стрелки относительно точки обзора камеры, и вы должны указать OpenGL, какой тип он должен отбирать.

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

Я подозреваю, что вы отбираете те поляры, которые хотите видеть: по умолчанию используется GL_BACK, поэтому переключение режима в GL_FRONT должно работать. Для получения дополнительной информации см. Документацию: http://www.opengl.org/sdk/docs/man/xhtml/glCullFace.xml

...