Главная страница
    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.037 c
15-1160592277
DillerXX
2006-10-11 22:44
2006.11.05
Haskell Haskell Haskell !!!


15-1160580008
Ломброзо
2006-10-11 19:20
2006.11.05
Складской вопрос


10-1124890680
Solo_Mes
2005-08-24 17:38
2006.11.05
Сообщение о подключениях


8-1137653425
ronyn
2006-01-19 09:50
2006.11.05
DS Pack прокрутка.


1-1159230544
Lex_!
2006-09-26 04:29
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский