Порядок индексов влияет на структуру куба в OPENGL

Хорошо, я знаю, что порядок определенно повлияет на структуру, если он будет в неправильном порядке.
Но у меня есть два набора Индексов, которые, я полагаю, являются правильными для отображения куба.
Когда я использую один из наборов, куб отображается правильно, а для другого — нет (проверьте изображения).

Правильный рендеринг
Неправильный рендеринг

Вот что я использую:
Следующее отображает правильно

GLubyte cubeIndices[24]={0,3,2,1,2,3,7,6,0,4,7,3,1,2,6,5,4,5,6,7,0,1,5,4};
glDrawElements(GL_QUADS,24,GL_UNSIGNED_BYTE,&cubeIndices);

Этот не отображает должным образом

GLubyte cubeIndices[24]={1,2,3,4,5,8,7,6,1,5,6,2,2,6,7,3,3,7,8,4 ,5,1,4,8};
glDrawElements(GL_QUADS,24,GL_UNSIGNED_BYTE,&cubeIndices);

я использую один и тот же набор вершин для обоих. Может кто-нибудь сказать мне, почему не работает ???

0

Решение

Хотя две последовательности индексов на первый взгляд выглядят совершенно по-разному, они действительно тесно связаны. Основное отличие состоит в том, что второй содержит индексы на основе 1, а первый содержит индексы на основе 0. Вам понадобятся индексы на основе 0 для OpenGL.

Есть еще одно отличие. Сгруппированы по четырем, первая последовательность это:

0,3,2,1
2,3,7,6
0,4,7,3
1,2,6,5
4,5,6,7
0,1,5,4

Второй, после вычитания 1 из каждого значения, это:

0,1,2,3
4,7,6,5
0,4,5,1
1,5,6,2
2,6,7,3
4,0,3,7

Порядок четырехугольников, очевидно, отличается. Теперь измените порядок второго списка, чтобы порядок квадратов был одинаковым, и напишите их рядом для сравнения:

0,3,2,1    0,1,2,3
2,3,7,6    2,6,7,3
0,4,7,3    4,0,3,7 --> 0,3,7,4
1,2,6,5    1,5,6,2
4,5,6,7    4,7,6,5
0,1,5,4    0,4,5,1

Для 3-го квадрата я также циклически сдвигал индексы для облегчения сравнения.

Разница в том, что при сравнении двух последовательностей индексов все четырехугольники имеют совершенно обратный порядок. Это может быть важно при рендеринге их с помощью OpenGL, потому что он определяет порядок намотки четырехугольников. В частности, если вы включаете отбраковку задней поверхности, вы должны убедиться, что ориентация многоугольников против часовой стрелки, если смотреть на куб снаружи.

2

Другие решения


По вопросам рекламы [email protected]