Как правильно форматировать кривые NURBS для формата файла волнового фронта .OBJ?

Я пытаюсь написать файл wavefront .OBJ, содержащий 3D NURBS кривые (не поверхности). Я нашел следующую ссылку, которая описывает, как правильно форматировать кривые и поверхности в файлах .OBJ: http://www.martinreddy.net/gfx/3d/OBJ.spec

Нет примера для рациональной кривой b-сплайна, и из документации мне непонятно, как форматируется вектор узла в разделе parm u. Любая помощь будет оценена по достоинству.

Ниже приведены примеры связанного кода. По ссылке выше есть описание рациональной b-сплайновой поверхности:

v -1.3 -1.0  0.0
v  0.1 -1.0  0.4  7.6
v  1.4 -1.0  0.0  2.3
v -1.4  0.0  0.2
v  0.1  0.0  0.9  0.5
v  1.3  0.0  0.4  1.5
v -1.4  1.0  0.0  2.3
v  0.1  1.0  0.3  6.1
v  1.1  1.0  0.0  3.3
vt 0.0  0.0
vt 0.5  0.0
vt 1.0  0.0
vt 0.0  0.5
vt 0.5  0.5
vt 1.0  0.5
vt 0.0  1.0
vt 0.5  1.0
vt 1.0  1.0
cstype rat bspline
deg 2 2
surf 0.0 1.0 0.0 1.0 1/1 2/2 3/3 4/4 5/5 6/6 \
7/7 8/8 9/9
parm u 0.0 0.0 0.0 1.0 1.0 1.0
parm v 0.0 0.0 0.0 1.0 1.0 1.0
end

и еще один пример для кривой Безье:

v -2.300000 1.950000 0.000000
v -2.200000 0.790000 0.000000
v -2.340000 -1.510000 0.000000
v -1.530000 -1.490000 0.000000
v -0.720000 -1.470000 0.000000
v -0.780000 0.230000 0.000000
v 0.070000 0.250000 0.000000
v 0.920000 0.270000 0.000000
v 0.800000 -1.610000 0.000000
v 1.620000 -1.590000 0.000000
v 2.440000 -1.570000 0.000000
v 2.690000 0.670000 0.000000
v 2.900000 1.980000 0.000000
# 13 vertices

cstype bezier
ctech cparm 1.000000
deg 3
curv 0.000000 4.000000 1 2 3 4 5 6 7 8 9 10 \
11 12 13
parm u 0.000000 1.000000 2.000000 3.000000  \
4.000000
end
# 1 element

person chloelle    schedule 05.05.2017    source источник


Ответы (1)


Существует несколько способов сохранить информацию о кривой NURBS в файле волнового фронта .obj.

Вот один пример:

v -2.300000 1.950000 1.000000 1.000000 
v -2.200000 0.790000 2.000000 1.000000 
v -2.340000 -1.510000 0.000000 1.000000 
v -1.530000 -1.490000 0.000000 1.000000 
v -0.720000 -1.470000 0.000000 1.000000 
v -0.780000 0.230000 0.000000 1.000000 

cstype rat bspline
deg 2
curv 0.00 1.00 1 2 3 4 5 6 
parm u 0.00 0.00 0.00 0.25 0.50 0.75 1.00 1.00 1.00  
end

Теперь давайте посмотрим поближе. У нас есть 6 вершин в декартовых координатах с дополнительной весовой координатой (x, y, z, w). Чтобы определить рациональный b-сплайн (NURBS) со степенью 2, мы должны установить

cstype rat bspline
deg 2

Следующие значения определяют кривую. Синтаксис:

curv [u-start] [u-end] [first-cp] [second-cp] [...]

http://www.martinreddy.net/gfx/3d/OBJ.spec, строка 788:

кривая u0 u1 v1 v2 . . .

Заявление об элементе для геометрии произвольной формы.

Указывает кривую, диапазон ее параметров и управляющие вершины. Хотя кривые нельзя закрасить или визуализировать, они используются другими программами Advanced Visualizer.

u0 — начальное значение параметра кривой. Это число с плавающей запятой.

u1 — конечное значение параметра кривой. Это число с плавающей запятой.

v — номер вершины для контрольной точки. Вы можете указать несколько контрольных точек. Для кривой требуется как минимум две контрольные точки.

Для нерациональной кривой контрольные точки должны быть трехмерными. Для рациональной кривой контрольными точками являются 3D или 4D. Четвертая координата (вес) по умолчанию равна 1,0, если она не указана.

Теперь мы определяем вектор/последовательность u. Значения, конечно, зависят от вашей геометрии.

parm u [knot1] [knot2] [...]

http://www.martinreddy.net/gfx/3d/OBJ.spec, строка 1107:

Парм у п1 п2 п3. . .

парм v p1 p2 p3 . . .

Заявление о теле для произвольной геометрии.

Задает значения глобальных параметров. Для кривых и поверхностей B-сплайна это определяет векторы узлов.

u - направление u для значений параметра.

v — направление v для значений параметров.

Чтобы установить значения u и v, используйте отдельные командные строки.

p — глобальный параметр или значение узла. Вы можете указать несколько значений. Требуется минимум два значения параметра. Значения параметров должны монотонно возрастать. Тип поверхности и степень определяют количество требуемых значений.

Надеюсь, это поможет!

person beecksche    schedule 18.07.2017