Render.ru

Поворот обьекта в координатах другого обьекта

maiden666

Мастер
Рейтинг
112
#1
как однозначно развернуть определённую локальную ось одного обьекта ( конкретно партикла) в локальных координатах другого?
Конкретизирую - представьте себе какбы кактус, при этом ось Х у нас выровняна по нормали, и апвектор каждой частицы смотрит по оси Z обьекта
 

igorznag

Мастер
Рейтинг
103
#2
Конкретизирую - представьте себе какбы кактус, при этом ось Х у нас выровняна по нормали, и апвектор каждой частицы смотрит по оси Z обьекта
Код:
obj=sphere radius:50 segs:16; rotate obj (eulerangles 30 0 0)
converttopoly obj
for i=1 to (polyop.getnumverts obj) do
(
vertex_pos=polyop.getVert obj i
vertex_normal=[0,0,0]
fuv=(polyop.getfacesusingvert obj i) as array
for f in fuv do vertex_normal+=polyop.getfacenormal obj f
vertex_normal/=fuv.count
up_dir=obj.dir
xaxis=normalize vertex_normal
yaxis=normalize(cross  xaxis up_dir)
zaxis=normalize(cross  xaxis yaxis)
if dot zaxis up_dir<0 then zaxis=-zaxis
m=matrix3 xaxis yaxis zaxis vertex_pos
t=Teapot radius:3; t.transform=m
)--for i=1 to (polyop.getnumverts obj) do
select obj; max zoomext sel all; completeredraw()
 

maiden666

Мастер
Рейтинг
112
#3
да, именно тот результат, которого я добиваюсь
Обьясню, к чему всё это затеяно. Мне надо получить то же самое партиклами, я честно в матрицах и кватернионах плохо понимаю, делал я так - извлекал нормали вертексов, и выравнивал по ней матрицу каждой частицы ( одну из осей), как мы видим, по нормалям-то они выровнялись, но апвектор каждой развёрнут на некий угол, происхождение которого я не понимаю, и образуется странный паттерн
Дальше у меня есть возможность получить ТМ и ротейшн ( в виде кватерниона) самого обьекта, но что с этим делать дальше, я абсолютно не представляю, может быть, подскажешь именно общий, теоретический путь?
1.jpg
 
Последнее редактирование:

igorznag

Мастер
Рейтинг
103
#4
Мне надо получить то же самое партиклами
Я честно в партиклах и Data Operator плохо понимаю.
может быть, подскажешь именно общий, теоретический путь?
Один слепой и один глухой хотят сделать гитару, чтобы потом играть на ней красивые мелодии.
делал я так - извлекал нормали вертексов, и выравнивал по ней матрицу каждой частицы ( одну из осей), как мы видим, по нормалям-то они выровнялись, но апвектор каждой развёрнут на некий угол, происхождение которого я не понимаю, и образуется странный паттерн
Дальше у меня есть возможность получить ТМ и ротейшн ( в виде кватерниона) самого обьекта, но что с этим делать дальше, я абсолютно не представляю
Делал я так:
Извлекаем нормаль вертекса. Извлекаем позицию вертекса.
Получаем матрицу-ТМ самого объекта.
Матрицу-ТМ объекта разделяем на 4 вектора и берем 3-й вектор.
3-й вектор матрицы-ТМ объекта это ось Z объекта.
Нормализуем нормаль вертекса.
Normalize(нормаль вертекса). Получим вектор "ось X" частицы.
Вычисляем векторное произведение "оси X" частицы и оси Z обьекта.
Cross Product ("ось X" частицы, ось Z обьекта). Получим вектор "ось Y" частицы.
Вычисляем векторное произведение "оси X" частицы и "оси Y" частицы.
Cross Product ("ось X" частицы, "ось Y" частицы). Получим вектор "ось Z" частицы.
Вычисляем cкалярное произведение "оси Z" частицы и оси Z объекта.
Dot Product ("ось Z" частицы, ось Z объекта). Получаем СП.
Используем условие. Если СП меньше ноля, тогда умчножаем "ось Z" частицы на (-1).
Создаем матрицу для частицы из 4-ех векторов.
Matrix ("ось X" частицы,"ось Y" частицы, "ось Z" частицы, позиция вертекса).
Применяем матрицу к частице.
 
Последнее редактирование:

maiden666

Мастер
Рейтинг
112
#5
Ха! А ведь получилось, спасибо
1.jpg

Просто тупо пошагово использовал твою логику
А ведь я на на CGSociety задавал вопрос тамошним гурам вроде Джонни Рэндома, и не получил внятного ответа
Поясню цель всей этой истории - нужно сделать риг для перьев птицы, чтобы ими можно было процедурно управлять, поднимать, топорщить...
Если проект принесёи плоды, с меня бутылка
 
Сверху