Есть куб с двумя текстурами. Первая текстура на верхней грани (2 фейса), вторая на остальных (10 фейсов)
mesh1.numverts - 8
mesh1.numTverts - 4
mesh1.numfaces - 12
Есть простой путь, тупо умножить фейсы на три. То есть задать для каждого фейса независимые вершины. получится так:
Mesh {
36; - 36 вершин
12; - 12 фейсов, величина всегда постоянная, в этом случае вершины идут от 0 до 35
36; - 36 MeshTextureCoords
Проблем нет, колличество вершин и текстурных координат равно. Только что файл становится больше.
Но мне надо оптимизировать, выкинуть дубликаты и тд.
Где-то вычитал, да и это логично, пересчитывать вершины по большему. Если вершин больше, чем текстурных, значит по вершинам и наоборот. Написал скрипт, выровнял вершины и поймал косяк. Нехватает вершин в меше, модель, там где была сделана зеркально, сливается. К примеру смоделили один ботинок, а второй зеркалом. При этом способе два ботинка сливаются в один. Если текстурных координат меньше, чем вершин, тогда при выравнии по текстурным, сама текстура "плывёт". Значит способ не подходит. Иду дальше.
Извлекаю вершины и текстурные координаты:
(квадратные скобки [убрал для удобства просмотра.])
mface
#(1, 2, 3, 3, 4, 1, 5, 6, 7, 7, 8, 5, 1, 4, 6, 6, 5, 1, 4, 3, 7, 7, 6, 4, 3, 2, 8, 8, 7, 3, 2, 1, 5, 5, 8, 2)
tface
#(1, 2, 3, 3, 4, 1, 4, 1, 2, 2, 3, 4, 4, 1, 2, 2, 3, 4, 4, 1, 2, 2, 3, 4, 4, 1, 2, 2, 3, 4, 4, 1, 2, 2, 3, 4)
Отсеиваю дубликаты и получаю:
vertM
#(1, 2, 3, 4, 5, 6, 7, 8, 1, 4, 6, 5, 3, 6, 3, 2, 8, 7, 2, 5) вершины
vertT
#(1, 2, 3, 4, 4, 1, 2, 3, 4, 1, 2, 3, 1, 3, 4, 1, 2, 3, 4, 2) текстурные координаты.
Получается 20 вершин и 20 текстурных координат, всё отлично, но тут возникла проблема, а как же теперь сгенерить или вычислить какому фейсу какие вершины прописывать
На выходе должно получится вот так (взято из экспорта в *.х из kw-плагина) :
#(1, 2, 3, 3, 4, 1, 5, 6, 7, 7, 8, 5, 9, 10, 11, 11, 12, 9, 4, 13, 7, 7, 14, 4, 15, 16, 17, 17, 18, 15, 19, 1, 20, 20, 8, 19)
Если есть какая-то формула или фрагмент скрипта, поделитесь пожалуйста.
mesh1.numverts - 8
mesh1.numTverts - 4
mesh1.numfaces - 12
Есть простой путь, тупо умножить фейсы на три. То есть задать для каждого фейса независимые вершины. получится так:
Mesh {
36; - 36 вершин
12; - 12 фейсов, величина всегда постоянная, в этом случае вершины идут от 0 до 35
36; - 36 MeshTextureCoords
Проблем нет, колличество вершин и текстурных координат равно. Только что файл становится больше.
Но мне надо оптимизировать, выкинуть дубликаты и тд.
Где-то вычитал, да и это логично, пересчитывать вершины по большему. Если вершин больше, чем текстурных, значит по вершинам и наоборот. Написал скрипт, выровнял вершины и поймал косяк. Нехватает вершин в меше, модель, там где была сделана зеркально, сливается. К примеру смоделили один ботинок, а второй зеркалом. При этом способе два ботинка сливаются в один. Если текстурных координат меньше, чем вершин, тогда при выравнии по текстурным, сама текстура "плывёт". Значит способ не подходит. Иду дальше.
Извлекаю вершины и текстурные координаты:
(квадратные скобки [убрал для удобства просмотра.])
mface
#(1, 2, 3, 3, 4, 1, 5, 6, 7, 7, 8, 5, 1, 4, 6, 6, 5, 1, 4, 3, 7, 7, 6, 4, 3, 2, 8, 8, 7, 3, 2, 1, 5, 5, 8, 2)
tface
#(1, 2, 3, 3, 4, 1, 4, 1, 2, 2, 3, 4, 4, 1, 2, 2, 3, 4, 4, 1, 2, 2, 3, 4, 4, 1, 2, 2, 3, 4, 4, 1, 2, 2, 3, 4)
Отсеиваю дубликаты и получаю:
vertM
#(1, 2, 3, 4, 5, 6, 7, 8, 1, 4, 6, 5, 3, 6, 3, 2, 8, 7, 2, 5) вершины
vertT
#(1, 2, 3, 4, 4, 1, 2, 3, 4, 1, 2, 3, 1, 3, 4, 1, 2, 3, 4, 2) текстурные координаты.
Получается 20 вершин и 20 текстурных координат, всё отлично, но тут возникла проблема, а как же теперь сгенерить или вычислить какому фейсу какие вершины прописывать
На выходе должно получится вот так (взято из экспорта в *.х из kw-плагина) :
#(1, 2, 3, 3, 4, 1, 5, 6, 7, 7, 8, 5, 9, 10, 11, 11, 12, 9, 4, 13, 7, 7, 14, 4, 15, 16, 17, 17, 18, 15, 19, 1, 20, 20, 8, 19)
Если есть какая-то формула или фрагмент скрипта, поделитесь пожалуйста.