Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Интерполяция матриц   Найти похожие ветки 

 
Зм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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.059 c
4-1150866700
й
2006-06-21 09:11
2006.11.05
вид курсора


15-1161187243
Хинт
2006-10-18 20:00
2006.11.05
Вопрос по html (таблицы)


1-1159276063
Lexer
2006-09-26 17:07
2006.11.05
Вызов MDI окна не меняя WindowState у родителя


2-1161529460
susergey
2006-10-22 19:04
2006.11.05
как из моей программы организовать отправку e-mail


11-1137747496
-=Mike=-
2006-01-20 11:58
2006.11.05
Вопрос по ListView