Файл Wavefront obj, у Лицов есть 3 текстурных координаты
Я экспортировал.obj из blender для загрузки в программу на C++. Я пишу. Все хорошо, но мне было интересно, когда при разборе лиц я заметил, что в третьей точке данных лица есть неиспользуемая координата текстуры.
f 1/1 2/2 3/3
//f 1/s 2/t 3/? Its vt3 that is the coordinate in question
Для чего это используется? и я должен держать это?
1 ответ
Я думаю, что вы немного неправильно понимаете формат файла obj и запутываетесь из-за сочетания 3D и 2D координат.
Треугольники на самом деле имеют 3 текстурные координаты, так же, как они имеют 3 позиции. Это правильно, ожидаемо и даже обязательно. Не было бы смысла, если бы две точки на треугольниках имели координаты текстуры, но одна из них не имела.
f
определяет одну грань, в данном случае с тремя вершинами (треугольник). Каждая вершина имеет одну трехмерную позицию и двухмерную UV-координату. Это означает, что треугольник состоит из 3-х трехмерных позиций и 3-х мерных УФ-координат (по одному на каждую вершину). Номера граней индексируют массивы положений вершин и координат текстуры, а не отдельные элементы, составляющие эти структуры.
Запись на самом деле выглядит следующим образом.
f v1/vt1 v2/vt2 v3/vt3
Прочитайте их для более подробной информации:
http://www.eg-models.de/formats/Format_Obj.html http://www.cs.cmu.edu/~mbz/personal/graphics/obj.html
Это может быть лучше визуализировано, если подумать о структуре треугольника в коде, например:
struct
{
Vec2 texCoord; // one vt for each vertex (s,t)
Vec3 position; // one v for each vertex (x,y,z)
} Vertex;
struct
{
Vertex verts[3]; // 3 vertices
} Face;