1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "MAXScript", создана пользователем maiden666, 16 янв 2015.

Модераторы: Savin Denis
  1. maiden666

    maiden666 Знаток

    С нами с:
    06.04.2010
    Сообщения:
    3.094
    Симпатии:
    87
    Баллы:
    74
    как однозначно развернуть определённую локальную ось одного обьекта ( конкретно партикла) в локальных координатах другого?
    Конкретизирую - представьте себе какбы кактус, при этом ось Х у нас выровняна по нормали, и апвектор каждой частицы смотрит по оси Z обьекта
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Код:
    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()
     
  3. maiden666

    maiden666 Знаток

    С нами с:
    06.04.2010
    Сообщения:
    3.094
    Симпатии:
    87
    Баллы:
    74
    да, именно тот результат, которого я добиваюсь
    Обьясню, к чему всё это затеяно. Мне надо получить то же самое партиклами, я честно в матрицах и кватернионах плохо понимаю, делал я так - извлекал нормали вертексов, и выравнивал по ней матрицу каждой частицы ( одну из осей), как мы видим, по нормалям-то они выровнялись, но апвектор каждой развёрнут на некий угол, происхождение которого я не понимаю, и образуется странный паттерн
    Дальше у меня есть возможность получить ТМ и ротейшн ( в виде кватерниона) самого обьекта, но что с этим делать дальше, я абсолютно не представляю, может быть, подскажешь именно общий, теоретический путь?
    1.jpg
     
    Последнее редактирование: 17 янв 2015
  4. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Я честно в партиклах и 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" частицы, позиция вертекса).
    Применяем матрицу к частице.
     
    Последнее редактирование: 18 янв 2015
    maiden666 нравится это.
  5. maiden666

    maiden666 Знаток

    С нами с:
    06.04.2010
    Сообщения:
    3.094
    Симпатии:
    87
    Баллы:
    74
    Ха! А ведь получилось, спасибо 1.jpg
    Просто тупо пошагово использовал твою логику
    А ведь я на на CGSociety задавал вопрос тамошним гурам вроде Джонни Рэндома, и не получил внятного ответа
    Поясню цель всей этой истории - нужно сделать риг для перьев птицы, чтобы ими можно было процедурно управлять, поднимать, топорщить...
    Если проект принесёи плоды, с меня бутылка
     
Модераторы: Savin Denis

Поделиться этой страницей