Относительно хранения цветов и нормалей для лиц; Я думаю, вы должны признать, что вам нужно дублировать вершины в одной и той же позиции для разных граней. Если две вершины имеют одни и те же атрибуты, но отличаются друг от друга, они существенно различаются, даже если один атрибут, которым они делятся, является их положением.
Итак, вы должны построить несколько VBO с дублирующими вершинами, если необходимо. Возможно, вы захотите выполнить это как этап разработки и сохранить результаты в удобном формате, чтобы сохранить часть работы во время выполнения.
edit: Это не значит, что вам нужно иметь отдельные вершины для каждого угла каждого грани каждого куба. На самом деле, самый дешевый способ визуализации того, что вы хотите (пока блоки вместе) с достаточно простой реализацией, вероятно, состоит в том, чтобы визуализировать переднюю и заднюю части каждого в виде двух треугольников, используя текстуру для цвета, GL_MAG_FILTER, GL_NEAREST
выборку и тщательное выравнивание координаты текстуры, используя пиксельный шейдер для обрезки прозрачных текселей.
Затем вам нужно будет проделать немного больше работы (не обязательно во время выполнения), чтобы определить, какие грани будут видны с боков, и сделать каждую из них геометрией (причем вся эта геометрия представляет собой один статический VBO для отображать, тем самым уменьшая как количество вызовов отрисовки, так и стоимость геометрии по сравнению, например, с вызовом -deprecated, хотя все еще часто полезно - отображать список для каждого куба). Опять же, с осторожностью вы можете убедиться, что это точно соединяется с невидимыми частями передней и задней граней.
Если вы хотите, чтобы ваши враги взорвали и составляющие их кубы разошлись, вы можете переключиться на более дорогую версию, отображающую каждый куб.