Файл 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;
Другие вопросы по тегам