Пишу на МаксСкрипте утилиту для экспорта анимации суть ее такова:
пробегаю по всем объектам: mesh=objects
пробегаю по всем кадрам : for frame = start to end do at time frame
и потом пишу в файл текстом велечины p.x,p.z,p.y,r.x,r.z,r.y, где
m = mesh.objectTransform
p = m.Position
r = m.Rotation
и потом в программе гружу все эти 6 величин в той же последовательности в функцию:function make_matrix(x,y,z,rx,ry,rz:single):TD3DXMatrix;
var
M1,M2,M3 : TD3DXMatrix;
begin
D3DXMatrixIdentity(M1);
D3DXMatrixIdentity(M2);
D3DXMatrixIdentity(M3);
D3DXMatrixIdentity(result);
D3DXMatrixRotationX(M1,RX);
D3DXMatrixRotationY(M2,RY);
D3DXMatrixRotationZ(M3,RZ);
D3DXMatrixMultiply(result, M1, M3);
D3DXMatrixMultiply(result, result, M2);
result._41:=X;
result._42:=Y;
result._43:=Z;
end;
А теперь о шаманстве:
естественно модель получается разбитой- все объекты расположены и повернуты никак не пойму как.
хотя с позициями еще бывает и все нормально(возможно, так как когда она повернуто тяжело понять смещена ли она).
При этом допустим если объект в сцене в максе повернут на углы (-77,852; -81,467; 81,643) что если перевести в радианы будет выглядеть так: (-1,35;-1,42;1,42)(xzy)
НО если я открывай файлик, который он мне создает(и помню о том что 2 и 3 координаты поменяны местами)
(0.03; -0.07; 0.69)(xzy)
Помогите, объясните что происходит, что я делаю не так?
вопрос на засыпку, а что мешает использовать вместо углов сразу матрицы (именно их и выводить из макса) ?
Тогда вопрос как привести матрицу из макса к матрице трансформации в директе?
нужно ряды и столбцы поменять местами - D3DXMatrixTranspose(...)
тогда еще один вопрос:
теперь вывожу матрицу. в файле получаю что то такого вида:
(matrix3 [-0.00977109,-0.106384,0.994277] [-0.0349547,0.993753,0.105985] [-0.999341,-0.033719,-0.0134287] [0.000933275,-0.0332208,-0.0222723])
это и есть максова матрица, как видите она 3х4 а в директе как мы знаем 4х4, что делать? какого куска не хватает?
XuX.programs
Не хватает правого столбца, который будет [0 0 0 1]T.
Кроме того, надо ее домножить на матрицу, меняющую местами y и z.
А вообще, стоит малость подучить линейную алгебру.
Wraith
как раз таки с линейной алгеброй все отлично..
если бы кто нибудь объяснил как устроена матрица в максе- тогда еще можно придумать что с ней сделать... а имея лишь 12 чисел и смутно догадываясь о том за что они отвечают- очень сложно придумывать..=)
>если бы кто нибудь объяснил как устроена матрица в максе
MaxScriptHelp > Value > Basic Data Values > Matrix3 Values
Тема в архиве.