OpenGL не сделает этого за вас, вам придется отбирать их самостоятельно.
Я сделал следующее в недавнем проекте:
Из коллекции позиций куба, которую я добавилзаписи для каждого лица в словарь.Это нанесенное на карту лицо в центре, чтобы лицо было нормальным.Прежде чем добавить новую (позиция, нормальная) пара, я бы проверил наличие этой позиции.Если найдено: удалите существующую запись и выбросьте новую.В противном случае добавьте новый (позиция, нормаль).
Из этого словаря вы можете создавать списки вершин и треугольников, и у вас не будет трогательных граней.
Возможно, есть более эффективные способы сделать это, но этого было достаточно для моего приложенияи прост в реализации.
Редактировать:
PSEUDOCODE:
d = dictionary<vec3, vec3>
for each cube:
for face 1..6:
pos = faceCenterFor(cube, face)
if pos in d:
remove d[pos]
else:
d[pos] = normalFor(cube, face)
for each (pos, normal) in d:
draw(vertsForFace(pos, normal))
# or save verts to an array for drawing later