Куб с треугольными полосками и векторными нормалями в openGL - PullRequest
1 голос
/ 11 ноября 2010

Я пытаюсь создать куб, используя одну серию вершин, такую ​​как попытка в этом примере (что я считаю неправильным) , а также говорил о на этом форуме . Ответ, который я ищу, должен выглядеть примерно так:

 1,  1, -1
-1, -1, -1,
 1,  1,  1

... и так далее. Я надеюсь свести это как минимум к 13 вершинам (6 односторонних куба = 12 треугольников).

Возможно ли это?

Ответы [ 3 ]

4 голосов
/ 13 ноября 2010

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

(В любом случае, если вас не интересуют нормальные значения или что-то еще: лучшее, что вы можете сделать с точки зрения эффективности - это указать только 8 вершин и использовать индексмассив. Это позволяет использовать кеш вершин, поэтому ваш вершинный шейдер может запускаться только один раз на каждую вершину, даже если он используется несколькими гранями).

3 голосов
/ 29 декабря 2013

Требуется 14 вершин, так как первые 3 составляют треугольник, а затем каждый дополнительный треугольник использует дополнительную вершину (2 + num_triangles). Вот как мне это удалось:

v = ((-w, -h,  d),  # front-bottom-left     0
     ( w, -h,  d),  # front-bottom-right    1
     (-w,  h,  d),  # front-top-left        2
     ( w,  h,  d),  # front-top-right       3
     (-w, -h, -d),  # back-bottom-left      4
     ( w, -h, -d),  # back-bottom-right     5
     (-w,  h, -d),  # back-top-left         6
     ( w,  h, -d))  # back-top-right        7


strip_vertices = (v[7] + v[6] + v[3] + v[2] + v[0] + v[6] + v[4] + 
                  v[7] + v[5] + v[3] + v[1] + v[0] + v[5] + v[4])

Как уже упоминалось, это вызывает проблемы с нормалями, поэтому я думаю, что я переписываю это в формате без полосы.

3 голосов
/ 11 ноября 2010

Я могу получить всего 17, если я правильно понял

 1: -1,  1,  1
 2:  1,  1,  1
 3: -1, -1,  1
 4:  1, -1,  1
 5: -1, -1, -1
 6:  1, -1, -1
 7: -1,  1, -1
 8:  1,  1, -1
 9: -1,  1,  1
10:  1,  1,  1
11:  1, -1,  1
12:  1,  1, -1
13:  1, -1, -1
14: -1, -1, -1
15: -1,  1, -1
16: -1, -1,  1
17: -1,  1,  1
...