Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Działania na macierzach - przekształcanie punktów itd

Ostatnio zmodyfikowano 2015-01-17 13:54
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
Działania na macierzach - przekształcanie punktów itd
» 2015-01-14 17:38:28
Chciałbym się dowiedzieć co mam wpisać w google by dowiedzieć się jak działa te mnożenie macierzy itd. Potrzebne jest mi to bezpośrednio do otrzymywania np. punktu po obrocie względem innego punktu.
Chciałbym napisać coś w stylu sf::Transform tylko, chcę wiedzieć jak to działa
Może znacie takie artykuły a może wystarczy coś wpisać w gugyl. Nie miałem jeszcze niczego takiego na matematyce, same macierze ogarniam ale nie wiem dokładnie jak się mnoży macierze i jakim cudem znajdują zastosowanie w grafice 2D i 3D.

Edit: Czytałem http://pl.wikipedia.org/wiki​/Elementarne_macierze_transformacji ale tam zbyt dużo nie pisze
Chciałbym też, żeby artykuł dotyczył i grafiki 2D i 3D.

Edit x2: Co do przekształcenia punktu (w grafice 2D) analizowałem kod źródłowy SFML. Jedyne czego nie rozumiem to właśnie tych transformacji. Przydałyby się też informacje co to jest te "det matrix" (wyznacznik macierzy?)
P-124913
pekfos
» 2015-01-14 20:01:41
Chciałbym się dowiedzieć co mam wpisać w google by dowiedzieć się jak działa te mnożenie macierzy
"Mnożenie macierzy", na przykład.
P-124936
killjoy
» 2015-01-14 20:17:05
Jeżeli jesteś zainteresowany matematyką w grafice 3D, na tej stronie znajdziesz niezłe kompendium: http:/​/www.dimmension3.spine.pl​/modules.php?name=Tutorials​&wtd=show_tutorial&nr=18
P-124938
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2015-01-14 23:40:24
A pekfos jak zwykle odpowiada najbardziej treściwie i pożytecznie, naszczęście już się przyzwyczaiłem. Killjoypl, zobaczę to i dam znać.
Jeszcze do pekfosa: mógłbyś czasem bardziej wczuć się w czyjąś sytuację, w tym przypadku np. nie odpowiadać sarkastycznie widząc, że nie mam pojęcia o tym czego chce sie nauczyć i ciężko jest mi to wytłumaczyć.
P-124959
DejaVu
» 2015-01-15 10:02:38
Biblioteka do obliczeń na macierzach:
Frazy, które należy wpisać w wyszukiwarkę google:

http://glm.g-truc.net/0.9.6​/index.html

Biblioteka Assimp również implementuje operacje matematyczne na macierzach.

/edit:
Dodam jeszcze, że sf::Transform jest przycięty do dwóch wymiarów, więc nie wykorzystasz tej klasy do 3D. Osobiście polecam Ci owrapować bibliotekę GLM lub Assimpa do postaci jaka będzie dla Ciebie wygodna.
P-124965
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2015-01-15 10:15:34
Najbardziej interesują mnie licencje tych bibliotek :P Nie chce z czegoś korzystać, czego nie będę mógł używać komercyjnie w przyszłości. Nie wiem dokładnie jaką mają licencje te biblioteki ale je przeczytam :)
Bardzo przypadł mi do gustu ten artykuł co podał killjoypl, dzięki.

Edit:
A właśnie DejaVu, mi nie chodzi o sam zestaw macierzy i gotowych operatorach. Sam DirectX11 a raczej xnamath ma już wbudowane np. XMMATRIX albo XMFLOAT4X4 i wszystkie operacje, tylko nie rozumiem tego w jaki sposób mogę wyciągnąć to co jest mi potrzebne, np. który element macierzy potrzebuje by uzyskać nowe współrzędne punktu po jego obrocie, co będzie mi potrzebne do zrobienia kolizji (ew. ragdolla) a nie chce robić takiego "Bounding-Box" bo jakby to powiedzieć... jest to trochę nierealistyczne.
P-124966
DejaVu
» 2015-01-15 14:18:15
MacierzOpisujacaPunkt*MacierzPrzeksztalcen=MacierzOpisujacaPrzeksztalconyPunkt. Odczytujesz wartości z tych samych pól na których zapisywałeś współrzędne do przekształcenia w pierwszej macierzy. Zweryfikuj czy to prawda.
P-124968
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2015-01-16 09:36:40
To nie do końca prawda. Oto wynik:

 1            0            0            0
 0            1            0            0
 0            0            1            0
 5            0            0            1

*

-1            0            8.7e-008     0
 0            1            0            0
-8.7e-008     0           -1            0
 0            0            0            1

=

-1            0            8.7e-008     0
 0            1            0            0
-8.7e-008     0           -1            0
-5            0       ->   4.4e-007     1
Dla kodu:
C/C++
XMMATRIX MacierzTranslacji = XMMatrixTranslation( 5, 0, 0 );
XMMATRIX MacierzRotacji = XMMatrixRotationY( XMConvertToRadians( 180 ) );
XMMATRIX MacierzWynikowa = MacierzTranslacji * MacierzRotacji;

cout << MacierzTranslacji << "*\n" << MacierzRotacji << "=\n" << MacierzWynikowa << endl;

Wszystko by było dobrze gdyby nie MacierzWynikowa_34 (ta komórka przy której jest strzałka). Skąd wzięła się tam ta liczba? Obracam punkt (5, 0, 0) o 180 stopni wg. punktu (0, 0, 0) a więc powinienem dostać punkt (-5, 0, 0) a nie (-5, 0, 4.4e-007)

Edit:
Warto też wspomnieć, że to nie jest "MacierzOpisujacaPunkt*MacierzPrzeksztalcen=MacierzOpisujacaPrzeksztalconyPunkt", ponieważ trzeba zachować konkretną kolejność, jest to:
MacierzTranslacjiSkalowania * MacierzSkalowania * MacierzTranslacjiRotacji * MacierzRotacji * MacierzOgolnejTranslacji
Jednak w tym przykładzie pomnożyłem w zaproponowany przez Ciebie sposób, by zobaczyć czy działa. Warto też dodać, że nawet w prawidłowej kolejności: MacierzRotacji*MacierzTranslacji wynik jest nieprawidłowy.
P-125021
« 1 » 2
  Strona 1 z 2 Następna strona