Развертывание многоугольника из 3d в 2d пространство (с использованием треугольников) для текстурных координат - PullRequest
1 голос
/ 30 января 2011

Итак, я создал модель в Ogre3D, и эта модель состоит из множества треугольников произвольного поворота и положения. Я хотел бы «развернуть» модель, как это делают многие программы моделирования, чтобы все треугольники отображались в 2d (x, y), но размеры треугольников сохранялись. Это для нанесения наклеек. Причина, по которой размеры треугольника должны быть сохранены, чтобы при применении текстуры не было растяжения.

Это было направление, о котором я думал, но у меня возникли проблемы с его визуализацией и достижением правильных алгоритмов:

//Verticies will have a converted bool;

func( triangle x):
     for each of x's vertices:
           map to x,y coordinates if not converted;
           check other triangles for common vertex if so call func(common_tri);

Как только это вернется, будет преобразованная версия всех треугольников, так что они будут развернуты и размещены на текстуре, где у меня возникли проблемы с отображением пространства x, y. Я не уверен, как перевести треугольник в трехмерном пространстве в двумерное пространство, чтобы он поддерживал все свои атрибуты (например, переход от углового обзора к перпендикулярному виду поверхности). Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 09 февраля 2011

Я бы думал о вершинах как о векторах.

Таким образом, вы можете нормализовать каждый вектор, затем удалить координату Z, а затем снова применить умножение.то есть tri = vec1, vec2, vec3, vec1Length = vec1.getLength () newVec1 = vec1.normalize () * vec1Length

Поскольку это сохранит размер векторов, но отобразит их в 2d-плоскости.(или это должно быть, я не на 100% уверен, что это математически правильно.)

Другой способ, которым вы могли бы сделать это, - думать о самом треугольнике как о 2-мерной плоскости, а затем преобразовывать векторы изэто локальное пространство к 2-й плоскости мирового пространства.

Так, например, происхождение мира равно (0,0,0)

, сам треугольник - это плоскость, определяемая тремя точками, выиспользуйте один вектор в качестве координаты X, найдите вектор, перпендикулярный этому, и у вас есть заданная координата y.Вы также можете определить Z на X, перекрестное произведение Y, это даст вам «смещение» от мирового происхождения, затем вы можете отобразить их обратно на 2d плоскость, представленную векторами X, Y из мирового происхождения (т.е. (1, 0) и (0,1)).Там должно быть математика, чтобы сделать это во многих основных книгах по компьютерной графике.

...