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

Экспорт анимации

Тема в разделе "MAXScript", создана пользователем Олег Гомозов 92913, 30 янв 2010.

Модераторы: Savin Denis
  1. Олег Гомозов 92913

    Олег Гомозов 92913 Пользователь сайта

    С нами с:
    07.03.2009
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    2
    Здравствуйте. Я пишу скрипт для экспорта анимации в готовый формат, основанный на матрицах преобразования directX, и столкнулся с такой проблемой: при получении матрици преобразования объекта сцены в максе через myNode.transform перемещение объекта после экспорта направленно не правильно, т.к. направление осей координат в максе и directX азличаеться ( XYрZ в максе соответствует XZY в D3D). После гугления и курения уроков попробывал умножить матрицу преобразования ( дописав последний столбец ) на такую
    Код:
    1 0 0 0 0 
    0 0 0 1 0
    0 1 0 0 0
    0 0 0 0 1
    
    как предлагалось сделать в одном из уроков. По моим прикидкам "на листочке" после умножения на такую матриц должно получиться следующее
    Код:
    a11 a12 a13 0              
    a21 a22 a23 0   =>    
    a31 a32 a33 0           
    a41 a42 a43 1           
    
    a11 a13 a12 0
    a21 a23 a22 0
    a31 a33 a32 0
    a31 a33 a32 0
    a41 a43 a42 1
    
    т.е. второй и третий столбец меняются местами. После преобразования таким образом моей матрици анимация проигрываеться нормально за исключением одного: объект "выворачиваеться наизнанку", при этом все остальные преобразования происходят нормально.
    Буду очень благодарен если кто-нибудь подскажет мне в чем я допустил ошибку или как мне лучше преобразовать исходную матрицу.
     
  2. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Не нужно умножать матрицу, просто поменяй местами значения Y<>Z в позиции и домнож на -1.
     
  3. Олег Гомозов 92913

    Олег Гомозов 92913 Пользователь сайта

    С нами с:
    07.03.2009
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    2
    Вот пример того что происходит после экспорта
    До
    [​IMG]
    После
    [​IMG]
     
  4. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    вроде уже ответил.
     
  5. Олег Гомозов 92913

    Олег Гомозов 92913 Пользователь сайта

    С нами с:
    07.03.2009
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    2
    Пока прикреплял картинки ты уже успел ответить)
    Немного не понял что нужно умножать на -1, всю матрицу или только последние два столбца?
     
  6. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Где в моем сообщении ты увидел хоть слово о столбцах ?
    Речь об значении позиции одной из осей которые меняешь местами Z или Y, должна быть инвертирована, которой не не помню )
    Думаю разберешься.
     
  7. Chebu

    Chebu Знаток

    С нами с:
    23.10.2005
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    60
    Олег Гомозов
    из матрицы в первом посте уберите третий столбец.
     
  8. Chebu

    Chebu Знаток

    С нами с:
    23.10.2005
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    60
    Олег Гомозов
    из матрицы в первом посте уберите третий столбец.

    x (dx) = x (max)
    z (dx) = -y (max)
    y (dx) = z (max)
     
  9. Олег Гомозов 92913

    Олег Гомозов 92913 Пользователь сайта

    С нами с:
    07.03.2009
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    2
    Ошибся когда сюда перепечатывал, в скрипте правильная стоит.
    Инвертировал ось. Искажение исправилось, но преобразования стали неправильно переноситься. Возможно я где то накосячил при записи в файл. В любом случае всем спасибо.
     
  10. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Так с отрицательными осями это я тебя запутал, это для майки нужно.

    Здесь просто меняешь местами в матрице все компоненты z<>y:
    Код:
     
    	  src = object.transform
    	  trans = matrix3 1
    	  -- prepare row1
    	  trans.row1.x = src.row1.x
    	  trans.row1.y = src.row1.z
    	  trans.row1.z = src.row1.y
    	  -- prepare row2
    	  trans.row2.x = src.row3.x
    	  trans.row2.y = src.row3.z
    	  trans.row2.z = src.row3.y
    	  -- prepare row3
    	  trans.row3.x = src.row2.x
    	  trans.row3.y = src.row2.z
    	  trans.row3.z = src.row2.y
    	  -- prepare row4
    	  trans.row4.x = src.row4.x
    	  trans.row4.y = src.row4.z
    	  trans.row4.z = src.row4.y
    При экспорте вершин и нормалей соответственно также меняем Z<>Y
     
  11. Chebu

    Chebu Знаток

    С нами с:
    23.10.2005
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    60
    зависит от системы координат (праворукая/леворукая), если в D3D использовать такую же, как в максе - то "-" не нужен, тогда просто y,z поменять
     
  12. Олег Гомозов 92913

    Олег Гомозов 92913 Пользователь сайта

    С нами с:
    07.03.2009
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    2
    Продолжаю бороться с движком.)
    По сути это тоже самое что я и делал в самом начале(см. первый пост 2ая, 3я матрицы), только делал я это во время записи. Использовал твой скрипт и, как ни удивительно, все получилось правильно. Видимо это очень сильное колдунство)) Спасибо.
    Сначала не обратил на это внимание. Система такая же как и в максе.

    Тепереь возник новый вопрос. myNode.transform дает матрицу преобразования относительно пивота объекта, но движек воспринимает для группы объектов только трансформации относительно одной точки. Как можно изменить исходную матрицу под преобразования относительно какой либо точки?
     
  13. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Одно дело пытаться и не разобраться, другое лень заглянуть в справочник или попытка в наглую решить задачу чужими руками.
    Так что если это деловое предложение милости просим в личку.


    PS
    Скоро прайс вывешу за перемножение двух матриц.
     
  14. Олег Гомозов 92913

    Олег Гомозов 92913 Пользователь сайта

    С нами с:
    07.03.2009
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    2
    Хорошо сам помучаюсь. Спасибо и на том))
     
  15. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Вот все вы так, нет чтобы заплатить ))
     
  16. Олег Гомозов 92913

    Олег Гомозов 92913 Пользователь сайта

    С нами с:
    07.03.2009
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    2
    Мне бы кто заплатил, сам на чистом энтузиазме делаю для товарищей экспортер.) П.С. Уходим от темы.
     
  17. Chebu

    Chebu Знаток

    С нами с:
    23.10.2005
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    60
    трансформация нода относительно точки = мировая трансформация нода * инвертированная матрица точки
     
Модераторы: Savin Denis

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