Android дополненной реальности Cameraview конвертировать в координаты экрана - PullRequest
4 голосов
/ 01 июня 2011

В настоящее время я разрабатываю свое собственное приложение с дополненной реальностью.Я пытаюсь написать свой собственный AR Engine, поскольку все фреймворки, которые я видел до сих пор, могут использоваться только с данными GPS.Он будет использоваться внутри помещения, я получаю данные о своем местоположении из другой системы.

На данный момент у меня есть:

        float[] vector = { 2, 2, 1, 0 };
        float transformed[] = new float[4];
        float[] R = new float[16];
        float[] I = new float[16];
        float[] r = new float[16];
        float[] S = { 400f, 1, 1, 1, 1, -240f, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
        float[] B = { 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 400f, 240f, 1, 1 };
        float[] temp1 = new float[16];
        float[] temp2 = new float[16];
        float[] frustumM  = {1.5f,0,0,0,0,-1.5f,0,0,0,0,1.16f,1,0,0,-3.24f,0};

        //Rotationmatrix to get transformation for device to world coordinates
        SensorManager.getRotationMatrix(R, I, accelerometerValues, geomagneticMatrix);
        SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_X, SensorManager.AXIS_Z, r);
        //invert to get transformation for world to camera
        Matrix.invertM(R, 0, r, 0);
        Matrix.multiplyMM(temp1, 0, frustumM, 0, R, 0);
        Matrix.multiplyMM(temp2, 0, S, 0, temp1, 0);
        Matrix.multiplyMM(temp1, 0, B, 0, temp2, 0);

        Matrix.multiplyMV(transformed, 0, temp1, 0, vector, 0);

Я знаю его уродливый код, но япросто пытаюсь получить объект "вектор", чтобы он был правильно нарисован с моей позицией (0,0,0) на данный момент.Размер моего экрана жестко задан в матрицах S и B (800x480).

Результат должен быть сохранен в «преобразованном» формате и иметь вид, подобный преобразованному = {x, y, z, w}.математика Я использовал эту ссылку: http://www.inf.fu -berlin.de / lehre / WS06 / 19605_Computergrafik / doku / rossbach_siewert / camera.html

Иногда моя графика окрашивается, но она прыгает вокруги это не в правильном положении.Я зарегистрировал переход с помощью SensorManager.getOrientation, и они кажутся нормальными и стабильными.

Так что я думаю, что делаю что-то с неправильной математикой, но я не мог найти лучшие источники о математике для преобразования моих данных,Может ли кто-нибудь помочь мне, пожалуйста?Заранее спасибо

Мартин

...