Я работаю над реализацией собственного импортера моделей.Файл содержит всю необходимую информацию (вершины, нормали вершин, координаты uv вершин, материалы и т. Д.) Важно отметить, что файл содержит модели с несколькими материалами.Настройка вершин довольно проста и работает правильно.В настройке лиц я не уверен на 100%.Я делаю следующее:
meshDict[name].faces.push(
new THREE.Face3(parseInt(triangles[t]),
parseInt(triangles[t + 1]),
parseInt(triangles[t + 2]),
[normals[parseInt(triangles[t])],
normals[parseInt(triangles[t + 1])],
normals[parseInt(triangles[t + 2])]],
new THREE.Vector3(1, 1, 1), matIndex));
Здесь: t - это итератор индекса массива треугольников, нормали - это массив, в котором хранится нормальная информация о вершинах, а matIndex - индекс материала грани на основеномер подсетки из объектного файла.Это также, кажется, работает правильно.
Теперь о сложной части.Я весь день искал четкое объяснение и / или хороший пример того, как настроить faceVertexUvs для сетки из нескольких материалов, но в каждом втором посте, который я нашел, показан другой метод для настройки этого.После долгих проб и ошибок я нашел это решение, которое работает, но выдает МНОГО предупреждений ...
for (var f = 0; f < faces.length; f++)
{
if (currentMesh.faceVertexUvs[faces[f].materialIndex] == undefined)
{
currentMesh.faceVertexUvs[faces[f].materialIndex] = []
faceOffset = (faces[f].materialIndex == 0? 0 : 1) * f;
}
currentMesh.faceVertexUvs[faces[f].materialIndex].push(f);
currentMesh.faceVertexUvs[faces[f].materialIndex][f - faceOffset] = [];
currentMesh.faceVertexUvs[faces[f].materialIndex][f - faceOffset].push(uvs[faces[f].a]);
currentMesh.faceVertexUvs[faces[f].materialIndex][f - faceOffset].push(uvs[faces[f].b]);
currentMesh.faceVertexUvs[faces[f].materialIndex][f - faceOffset].push(uvs[faces[f].c]);
}
Здесь uvs - это массив Vector2 такой же длины, что и массив вершин.В основном я делаю: faceVertexUvs [materialIndex] [faceIndex] [uvs [a], uvs [b], uvs [c]].
Количество материальных индексов равно количеству подсетей, которыеобъект имеет.
Так что это решение вроде работает нормально, но некоторые текстуры выглядят некорректно (я подозреваю, что UV-картирование этой области не установлено правильно), и я получаю многопредупреждения, в которых говорится:
Важно отметить, что все модели выглядят нормально в программе экспорта, поэтому проблема не в этом.
Есть идеи, что я здесь делаю не так?