OpenGL обрабатывает вершину как один длинный вектор
(position, normal, texcoord[0]…texcoord[n], attrib[0]…attrib[n])
, и эти длинные векторы индексируются.Ваш вопрос относится к той же категории, например, как использовать общие вершины с несколькими нормалями.И канонический ответ заключается в том, что эти вершины на самом деле не являются общими, потому что в долгосрочной перспективе они не идентичны."вершины, добавляющие их в (новый) список с ограничением уникальности;(хеш) карта из вершины → индекс служит этой работе.Как то так
next_uniq_index = 0
for f in faces:
for i in f.indices:
vpos = vertices[i.vertex]
norm = normals[i.normal]
texc = texcoords[i.texcoord]
vert = tuple(vpos, norm, texc)
key
if uniq_vertices.has_key(key):
uniq_faces_indices.append(uniq_vertices[key].index)
else:
uniq_vertices[key] = {vertex = key, index = next_uniq_index}
next_uniq_index = next_uniq_index + 1