Здравствуйте. Я пишу скрипт для экспорта анимации в готовый формат, основанный на матрицах преобразования 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
как предлагалось сделать в одном из уроков. По моим прикидкам "на листочке" после умножения на такую матриц должно получиться следующее
т.е. второй и третий столбец меняются местами. После преобразования таким образом моей матрици анимация проигрываеться нормально за исключением одного: объект "выворачиваеться наизнанку", при этом все остальные преобразования происходят нормально.
Буду очень благодарен если кто-нибудь подскажет мне в чем я допустил ошибку или как мне лучше преобразовать исходную матрицу.
Где в моем сообщении ты увидел хоть слово о столбцах ?
Речь об значении позиции одной из осей которые меняешь местами Z или Y, должна быть инвертирована, которой не не помню )
Думаю разберешься.
Ошибся когда сюда перепечатывал, в скрипте правильная стоит.
x (dx) = x (max)
z (dx) = -y (max)
y (dx) = z (max)
Инвертировал ось. Искажение исправилось, но преобразования стали неправильно переноситься. Возможно я где то накосячил при записи в файл. В любом случае всем спасибо.
Здесь просто меняешь местами в матрице все компоненты z<>y:
По сути это тоже самое что я и делал в самом начале(см. первый пост 2ая, 3я матрицы), только делал я это во время записи. Использовал твой скрипт и, как ни удивительно, все получилось правильно. Видимо это очень сильное колдунство)) Спасибо.
зависит от системы координат
Сначала не обратил на это внимание. Система такая же как и в максе.
Тепереь возник новый вопрос. myNode.transform дает матрицу преобразования относительно пивота объекта, но движек воспринимает для группы объектов только трансформации относительно одной точки. Как можно изменить исходную матрицу под преобразования относительно какой либо точки?
Одно дело пытаться и не разобраться, другое лень заглянуть в справочник или попытка в наглую решить задачу чужими руками.
Так что если это деловое предложение милости просим в личку.
PS
Скоро прайс вывешу за перемножение двух матриц.
Тепереь возник новый вопрос. myNode.transform дает матрицу преобразования относительно пивота объекта, но движек воспринимает для группы объектов только трансформации относительно одной точки. Как можно изменить исходную матрицу под преобразования относительно какой либо точки?
трансформация нода относительно точки = мировая трансформация нода * инвертированная матрица точки
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Олег Гомозов
как предлагалось сделать в одном из уроков. По моим прикидкам "на листочке" после умножения на такую матриц должно получиться следующее
т.е. второй и третий столбец меняются местами. После преобразования таким образом моей матрици анимация проигрываеться нормально за исключением одного: объект "выворачиваеться наизнанку", при этом все остальные преобразования происходят нормально.
Буду очень благодарен если кто-нибудь подскажет мне в чем я допустил ошибку или как мне лучше преобразовать исходную матрицу.
Savin Denis
Олег Гомозов
До
После
Savin Denis
Олег Гомозов
Немного не понял что нужно умножать на -1, всю матрицу или только последние два столбца?
Savin Denis
Речь об значении позиции одной из осей которые меняешь местами Z или Y, должна быть инвертирована, которой не не помню )
Думаю разберешься.
Chebu
из матрицы в первом посте уберите третий столбец.
Chebu
из матрицы в первом посте уберите третий столбец.
x (dx) = x (max)
z (dx) = -y (max)
y (dx) = z (max)
Олег Гомозов
Инвертировал ось. Искажение исправилось, но преобразования стали неправильно переноситься. Возможно я где то накосячил при записи в файл. В любом случае всем спасибо.
Savin Denis
Здесь просто меняешь местами в матрице все компоненты z<>y:
При экспорте вершин и нормалей соответственно также меняем Z<>Y
Chebu
Олег Гомозов
По сути это тоже самое что я и делал в самом начале(см. первый пост 2ая, 3я матрицы), только делал я это во время записи. Использовал твой скрипт и, как ни удивительно, все получилось правильно. Видимо это очень сильное колдунство)) Спасибо.
Сначала не обратил на это внимание. Система такая же как и в максе.
Тепереь возник новый вопрос. myNode.transform дает матрицу преобразования относительно пивота объекта, но движек воспринимает для группы объектов только трансформации относительно одной точки. Как можно изменить исходную матрицу под преобразования относительно какой либо точки?
Savin Denis
Так что если это деловое предложение милости просим в личку.
PS
Скоро прайс вывешу за перемножение двух матриц.
Олег Гомозов
Savin Denis
Олег Гомозов
Chebu