Форум: "Игры";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
ВнизИнтерполяция матриц Найти похожие ветки
← →
Зм1й © (2006-01-25 19:49) [0]Подскажите пожалуйста, как можно интерполировать две матрицы 4*4, содержащие в себе параллельный перенос, поворот и масштабирование? А то я чё-то совсем запарился...
← →
Кефир87 © (2006-01-25 22:13) [1]Какая интерполяция? В этой матрице хранятся конкретные данные. Чего там интерполировать?
← →
Зм1й © (2006-01-26 12:24) [2]Ну как же, есть ведь интерполяция векторов(вершин), кватернионов, а мне нужно с матрицами
MRot1:=Mul(Mul(MRotX1, MRotY1), MRotZ1);
M1:=Mul(Mul(MTrans1, MRot1), MScl1);
MRot2:=Mul(Mul(MRotX2, MRotY2), MRotZ2);
M2:=Mul(Mul(MTrans2, MRot2), MScl2);
M_Intermediate:=Interp(M1, M2, T); // 0<=T<=1
Подскажите пожалуйста, очень надо!
← →
Cash © (2006-01-26 13:56) [3]Три раза перечитал вопрос..., ничего не понял!
Батенька!... Так иьзя! :)))
Ну есть у нас три матрицы:
- поворот
- масштаб
- перенос
Q: Ну... что мы можем с ними еще сделать?
(уж точно не интерполировать!)
A: Мы можем получить результирующую матрицу!
TM - матрица переноса
RM - матрица поворота
SM - матрица масштабирования
ResM - результат
ResM := SM*RM*TM, иначе никак!
Это можно произвести с помощью
D3DXMatrixMultiply(ResultM,LeftM,RightM);
Q: А чё мы можем сделать с этой резултирующей матрицей?
A: Получить результирующие вектора для вершин!
Это делается с помощью:
D3DXVec3TransformCoord(ResultV,SourceV,ResultM);
← →
A22 © (2006-01-26 15:30) [4]проще всего интерполировать вектор-данные, по которым можно результирующую матрицу построить. т.е. есть два набора векторов: позиция, углы, масштаб по осям. можно интерполировать с нужным коэффициентом эти векторы и построить по ним матрицу. думаю, это будет лучшим вариантом, так как есть матрицы масштабирования и переноса еще можно "интерполировать", получая корректный промежуточныйй вариант для
0 < t < 1, то с матрицей поворота все не так просто - ее придется пересчитывать. возможно, есть способ быстрого ее пересчета, но, к сожалению, без справочника под рукой указать КАК не могу :(
← →
Зм1й © (2006-01-26 16:34) [5]В том-то и смысл, что нужно интерполировать две результирующие матрицы (перенос, поворот и масштаб - это одна матрица), ни прибегая к интерполяции отдельных векторов... Понимаете???
← →
Cash © (2006-01-26 17:10) [6]Зм1й © (26.01.06 16:34) [5]:
Ну, елки палки, доели видать тебя эти две матрицы. :)
Не, я так и не понял, с какой собаки ты интерполяцию сюда приписываешь?
Мож я про ету кракозяблю не все помню..., а мож и ты чего лишниго ей
пририсовать хочешь! Надобы этот вопрос разъяснить сперва.
← →
Зм1й © (2006-01-26 17:35) [7]
> Ну, елки палки, доели видать тебя эти две матрицы. :)
Ни говори-ка, я наверно скоро повешусь
← →
MBo © (2006-01-26 17:46) [8]Придется разложить обобщенные матрицы аффинного преобразования на матрицы простых преобразований (поворота и т.д.), и уже для них выполнять интерполяцию, перемножая для получения промежуточных обобщенных матриц.
← →
Зм1й © (2006-01-26 18:15) [9]
> Придется разложить
Это ужасно. Ну если уж это единственный способ, не подскажете, как это можно сделать?
← →
MBo © (2006-01-26 18:37) [10]M - матрица 4x4
думаю, понятно, что из нее легко выделить матрицу переноса T, остается левая верхняя матрица X 3x3. Поскольку из нее требуется выделить диагональную(масштаб) и ортонормальную(вращения), то в голову приходит SVD-разложение X=L*S*R, где L и R - ортонормальные, а S - диагональная с неотрицательным элементами. Более простые методы факторизации - LU или QR, к сожалению, не дают подходящего для данной цели разложения.
Ортонормальные матрицы интерполируются с помощью SLERP, а остальные -простой линейной интерполяцией.
Кстати, если без масштабирования - то это будет похоже на Key Frame Animation, что у игроделов популярно.
← →
Cash © (2006-01-26 18:50) [11]Посмотри здесь:
http://www.gamedev.ru/coding/10805.shtml
вдуг поможет.
← →
Sapersky (2006-01-26 19:05) [12]В GLScene (VectorGeometry.pas) есть MatrixDecompose. Не знаю правда, насколько хорошо работает.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c