OpenGL не отображает индикаторы соответствия для куба? - PullRequest
0 голосов
/ 29 мая 2020

Я учил себя opengl (на C ++), подумал и получил рабочий набор индексов, которые делают куб:

GLushort indicies[] =
{
    2, 0, 1,
    1, 2, 3,
    3, 1, 4,
    5, 1, 4,
    4, 5, 7,
    7, 5, 6,
    0, 7, 6,
    0, 7, 2,
    7, 0, 1,
    1, 7, 4,
    6, 5, 3,
    6, 3, 2
};

сейчас, я пытаюсь загрузить файл obj из блендера куба, и это признаки, которые он мне дает:

GLushort indicies[] =
{
    5,3,1,
    3,8,4,
    7,6,8,
    2,8,6,
    1,4,2,
    5,2,6,
    5,7,3,
    3,7,8,
    7,5,6,
    2,4,8,
    1,3,4,
    5,1,2
};

Насколько я понимаю, на самом деле не имеет значения, в каком порядке ваши символы, до тех пор, пока каждый набор из трех составляет треугольник . Однако, когда я запустил то, что дал мне экспортированный obj-файл блендера, мой куб был полностью испорчен. Я думал, что, возможно, индикаторы должны иметь базовый 0 вместо базового, поэтому я вычел 1 из каждого индекса, чтобы сделать их базовым 0: это:

enter image description here

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

1 Ответ

1 голос
/ 29 мая 2020

You cube, в экспорте Blender, выглядит так (или его изоморфизм)

  3----7
 /    /|
0----1 |
|    | 6
|    |/
4----5

с двумя скрытыми позади.

(4,2,0) - половина левая сторона. (2,7,3) - это половина спины. (6,5,7) - половина правой стороны и т. Д.

Ваши вершины, однако, не имеют смысла. Допустим, это первый треугольник

0----1
|   /
|/
2

Тогда у вас будет

0----1
|   /|
|/   |
2----3

Но обратите внимание, что (2,0,1) по часовой стрелке, а (1,2,3) против часовой стрелки. OpenGL, как и большинство 3D-систем, будет рассматривать только треугольники CW или CCW как обращенные вперед и не будет отображать обращенные назад.

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

...