4

現在、独自の拡張現実アプリを開発しています。これまでに見たすべてのフレームワークは GPS データで使用できるため、独自の AR エンジンを作成しようとしています。屋内で使用する予定で、別のシステムから位置データを取得しています。

私がこれまでに持っているものは次のとおりです。

        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 でローリングをログに記録しましたが、問題なく安定しているようです。

だから私は数学を間違ってやっていると思いますが、データを変換するための数学に関するより良い情報源を見つけることができませんでした. 誰か助けてくれませんか?前もって感謝します

マーティン

4

0 に答える 0