ПрограммированиеФорумОбщее

MaxScript шаманство с objectTransform матрицей

#0
13:08, 9 сен 2009

Пишу на МаксСкрипте утилиту для экспорта анимации суть ее такова:
пробегаю по всем объектам: 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)

Помогите, объясните что происходит, что я делаю не так?

#1
15:58, 9 сен 2009

вопрос на засыпку, а что мешает использовать вместо углов сразу матрицы (именно их и выводить из макса) ?

#2
16:20, 9 сен 2009

Тогда вопрос как привести матрицу из макса к матрице трансформации в директе?

#3
16:27, 9 сен 2009

нужно ряды и столбцы поменять местами - D3DXMatrixTranspose(...)

#4
9:15, 10 сен 2009

тогда еще один вопрос:
теперь вывожу матрицу. в файле получаю что то такого вида:
(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, что делать? какого куска не хватает?

#5
9:23, 10 сен 2009

XuX.programs
Не хватает правого столбца, который будет [0 0 0 1]T.
Кроме того, надо ее домножить на матрицу, меняющую местами y и z.

А вообще, стоит малость подучить линейную алгебру.

#6
9:45, 10 сен 2009

Wraith
как раз таки с линейной алгеброй все отлично..
если бы кто нибудь объяснил как устроена матрица в максе- тогда еще можно придумать что с ней сделать... а имея лишь 12 чисел и смутно догадываясь о том за что они отвечают- очень сложно придумывать..=)

#7
10:37, 10 сен 2009

>если бы кто нибудь объяснил как устроена матрица в максе

MaxScriptHelp > Value > Basic Data Values > Matrix3 Values

ПрограммированиеФорумОбщее

Тема в архиве.