Witam Udało mi się znaleźć odchylenie, skok i przechylenie z akceleratora i czujnika magnetycznego w mojej aplikacji na Androida. Teraz chcę obrócić cel kamery (min3d) wokół punktu w mojej scenie zgodnie z kątami. Rezultatem jest możliwość spojrzenia w scenę 3D poprzez przeniesienie urządzenia z Androidem. Próbowałem przez kilka dni prawie przeczytać wszystkie odpowiedzi w SO, ale po prostu nie mogę tego zrobić.Jak uzyskać RotationMatrix od odchylenia, skoku i przechylenia
Ruch, który otrzymuję, nie ma absolutnie żadnego sensu. Weryfikowałem, że moje odchylenie wynosi od 0 do 360 i jest poprawne, wysokość jest w zakresie od -90 do 90 i jest poprawna, a na końcu rolka ma wartość od -180 do 180 i jest stała.
Zasadniczo robię rotację macierzy i mnożenie przez mój cel i wektor w górę.
float[] rotation = new float[16];
Matrix.setIdentityM(rotation, 0);
Matrix.rotateM(rotation, 0, (float) Math.toDegrees(roll), 0, 0, 1);
Matrix.rotateM(rotation, 0, (float) Math.toDegrees(pitch)+90f, 1, 0, 0);
Matrix.rotateM(rotation, 0, (float) Math.toDegrees(-azimut), 0, 1, 0);
float[] target = new float[4];
float[] source = new float[]{0,0,150,0};
Matrix.multiplyMV(target, 0,rotation, 0, source, 0);
float targetX = target[0] + 0;
float targetY = target[1] + 150;
float targetZ = -target[2] + 0;
target = new float[4];
source = new float[]{0,1,0,0};
Matrix.multiplyMV(target, 0,rotation, 0, source, 0);
float upX = target[0];
float upY = target[1];
float upZ = target[2];
scene.camera().target.x = targetX;
scene.camera().target.y = targetY;
scene.camera().target.z = targetZ;
scene.camera().upAxis.x = upX;
scene.camera().upAxis.y = upY;
scene.camera().upAxis.z = upZ;
Początkowo mój cel wynosi (0,0,150), a mój wektor up to (0,1,0).
Dziękuję za pomoc.
Znaleziono :) Zaktualizowano moją odpowiedź. – Sung