2011-01-30 3 views
1

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

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

//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. Я не уверен, как получить треугольник в трехмерном пространстве до 2d-пространства, чтобы он сохранял все свои атрибуты (например, переходя от углового вида к перпендикулярному виду поверхности). Любая помощь будет принята с большой благодарностью.

+0

Если никто не может вам ответить, вам может потребоваться проверить источник блендера, uv-распаковка должна быть * где-то там. https://svn.blender.org/svnroot/bf-blender/trunk/blender/ –

+0

Ну, я смотрел на такие действия в XSI, но никто из них даже не достиг того, что я пытался сделать. Они обернутся, и я хотел бы, чтобы он просто был плоский на материале. Спасибо за предложение. –

+0

Я не уверен, что вы делаете предположение, что данная вершина отображает единственную точку в xy. Для модели, которая является топологически сферой, безусловно, ее отображение в плоскость таким образом невозможно (например, рассмотрим простой куб). Соответственно, если вы хотите избежать растяжения, то даже три стороны куба в одной вершине не могут все отобразить, что эта общая вершина на плоскости. Поэтому я думаю, что вам либо придется обрабатывать каждый треугольник отдельно, либо растягиваться, а в последнем случае по крайней мере некоторые вершины потребуют нескольких отображений. – Keith

ответ

0

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

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

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

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

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

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