Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
15-1160849496
vidiv
2006-10-14 22:11
2006.11.05
14 октября &amp;mdash; суббота


2-1161183115
Mb
2006-10-18 18:51
2006.11.05
Редактирование БД


2-1161170827
pkm
2006-10-18 15:27
2006.11.05
Объясните смысл ошибки.


15-1160522565
Германн
2006-10-11 03:22
2006.11.05
Пусть на меня посыпятся ещё куча кирпичей,


2-1161099536
wewill
2006-10-17 19:38
2006.11.05
Проверка числового значения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский