-
Никак не пойму что делает эта процедура. Она выставляет матрицу трансформации, или добавляет трансформацию к уже установленной???
Тоесть есть у меня три матрицы: M1,M2,M3
Я вызываю три раза SetTransform
SetTransform(M1); SetTransform(M2); SetTransform(M3);
На выходе что? Трансформация с учетом все трех матриц или только последней?
-
Удалено модератором Примечание: мат
-
Удалено модератором Примечание: и не цитируем
-
> [2] Elec3C © (18.05.08 22:51)
Гхм. Смешно. :)
-
Знаешь, сколько нужно команд в OGL, чтобы повернуть мировую матрицу? ОДна? glRotate.
Причем вращение идет не вокруг какой то из фиксированных осей, а вокруг указанной оси! Поэтому работа с кватернионами очень легко реализуется.
Можешь привести DX код вращения на 15 градусов вокруг оси 0.75,0.4,1? На gl это так: glRotate(15,0.75,0.4,1);
-
> glRotate(15,0.75,0.4,1);угу, вот только после этого надо не забыть вернуть все обратно glRotate(-15,0.75,0.4,1); а то получится забавный эффект :) > Поэтому работа с кватернионами очень легко реализуется.D3DXQUATERNION ? > Причем вращение идет не вокруг какой то из фиксированных > осей, а вокруг указанной оси!D3DXQuaternionRotationAxis или D3DXQuaternionRotationYawPitchRoll ? > Можешь привести DX код вращения на 15 градусов вокруг оси > 0.75,0.4,1?C++ D3DXQUATERNION l_quat;
D3DXMATRIX l_mat;
D3DXVECTOR3 l_vec = (0.75, 0.4, 1);
D3DXMatrixRotationQuaternion(&l_mat, D3DXQuaternionRotationAxis(&l_quat, &l_vec, 0.262 /* ~15 градусов */));
pDevice9->SetTransform(D3DTS_WORLD, &l_mat); З.Ы. только холивара не разводите!
-
> > glRotate(15,0.75,0.4,1); > угу, вот только после этого надо не забыть вернуть все обратно > glRotate(-15,0.75,0.4,1); > а то получится забавный эффект :)
Вот чтобы забавных эффектов не было, есть стэк матриц glPushMatrix/glPopMatrix.
> D3DXQUATERNION l_quat; > D3DXMATRIX l_mat; > D3DXVECTOR3 l_vec = (0.75, 0.4, 1); > D3DXMatrixRotationQuaternion(&l_mat, D3DXQuaternionRotationAxis(&l_quat, > &l_vec, 0.262 /* ~15 градусов */)); > pDevice9->SetTransform(D3DTS_WORLD, &l_mat);
Ага. Только надо еще помнить, что до этого какие то трансформации проводились, и хорошо бы их не стирать. Поэтому добавится еще получение текущей матрицы, и умножение ее на нашу трансформацию. И все это против одной команды OGLя. :)
Я ничего против DX не имею(на самом деле много чего имею, но это к данному случаю не относится). Некоторые вещи там сделаны действительно удобно. Матрицы к этим вещам не относятся.
-
> Ага. Только надо еще помнить, что до этого какие то трансформации > проводились, и хорошо бы их не стирать. > Поэтому добавится еще получение текущей матрицы, и умножение > ее на нашу трансформацию. Вот поэтому обычно на DX так не делают. Там хранят для каждого объекта свою матрицу, включающую все преобразования "родителей". Речь ведь о скелетной анимации шла, я правильно понял?
> Вот чтобы забавных эффектов не было, есть стэк матриц glPushMatrix/glPopMatrix. Вот именно. Что бы добиться одинаковых результатов на DX и OGL будет в любом случае не одна строка, как ты пытаешься показать.
> Некоторые вещи там сделаны действительно удобно. Матрицы > к этим вещам не относятся. Матрицы просто вынесены из контекста "графического API". При желании вообще можно написать свою собственную библиотеку по работе с матрицами. Это не плюс и не минус, так просто есть.
-
> Вот поэтому обычно на DX так не делают. > Там хранят для каждого объекта свою матрицу, включающую > все преобразования "родителей". Речь ведь о скелетной анимации > шла, я правильно понял?
Нет. Об анимации трансформации. Ну суть таже.
> Вот именно. Что бы добиться одинаковых результатов на DX > и OGL будет в любом случае не одна строка, как ты пытаешься > показать.
Вращение - ОДНА операция. Стэк - это уже совсем из другого села. Я о нем вообще о нем вспомнил только из за вашего "то получится забавный эффект "
> Матрицы просто вынесены из контекста "графического API". > При желании вообще можно написать свою собственную библиотеку > по работе с матрицами.
Собственно уже. :))
> Это не плюс и не минус, так просто есть.
В [1] высказывание что называется "в сердцах". Не заявляющее о том, что DX - отстой, как и не говорящее об обратном. Просто как факт: в GL более продуманные средства работы с матрицами. Да можно тоже самое сделать и на DX, просто надо писать свой интерфейс.
-
Чтобы получить результат комбинации трех матриц необходимо сначала их последовательно перемножить(перемножение матриц некоммутативная операция,поэтому последовательность операции влияет на конечный рез-т) при помощи функции D3DXMatrixMultiply: D3DXMatrixMultiply(mOut,M1,M2); D3DXMatrixMultiply(mOut,mOut,M3);
В вашем случае устанавливается только последняя матрица.
-
> [9] Илья © (08.09.08 11:57)
Некропосты - это модно? :))
-
> некоммутативная операция
Вот так уже модно выражаться %))
|