Android matrycy używa skia i jego wiersz głównym czyli indeksy są następujące
0 1 2
3 4 5
6 7 8
I kontrastują OpenGL korzysta indeksy jak tak
0 3 6
1 4 7
2 5 8
"Znaczenia" są identyczne pod względem położenia matrycy.
a b tx
c d ty
0 0 1
a, b, c, d skali kodowania & obrót w tym samym czasie. tx/ty kodować tłumaczenie. Jeśli wykonujesz m.getValues (vals); następnie vals [2] == tx, vals [5] == ty, a reszta jest prosta. Najlepszym sposobem, aby wyodrębnić tłumaczenie jest, aby wektorze
float[] point = {0, 0};
Następnie na mapę i zobaczyć, gdzie kończy się i jest to Twoje tłumaczenie (co jest dokładnie (tx, ty).W rzadkich przypadkach jej nie
dostać skali mapy drugi punkt
float[] point2 = {1, 0};
Teraz weź różnicę rel = (point - punkt2) i uzyskać długość tego wektora i że twoja waga. Aby wyodrębnić obrót, należy znormalizować rel i łatwo jest uzyskać jego standardowy kąt.
Dziękuję, ale co oznacza perspektywa w tym zakresie? – Matt
Honesly, nie wiem .. Założę się, że te wartości są zastrzeżone, a powodem ich obecności jest być może uzupełnienie macierzy. Tutaj znajdziesz więcej informacji na ten temat: http://mobiledevelop.blogspot.com/2009/02/android-canvas-translation-discussion.html –
Android używa skia i sprawdziłem kod źródłowy dla klasy matrix Android, w jej Rdzeń C++, po prostu klei Matrix, z SkMatrix. Macierz ma rozmiar 3x3. Z tego powodu MSCALE_X/Y nie jest tak naprawdę skalą. Dopóki nie ma rotacji, jest to skala. Jeśli macierz koduje obrót, musisz wykonać dodatkową matematykę, aby obliczyć skalę. MPERSP służy do obliczania współrzędnej "z", domyślnie z = 1. Jeśli z! = 1 to x = x/z; y = y/z; z = z/z = 1. Ogólnie nie musisz się martwić o to. To jest jak opengl 4x4 dla 3D, z wyjątkiem Androida 3x3 dla 2D –