2017-06-22 8 views
4

私は360画像をレンダリングしているので、カメラの前にオブジェクトや十字線を追加したい(広告掲示板の概念)というアプリケーションを作っています。カメラの前にオブジェクトを置く方法

私はスタックオーバーフロー自体から多くの疲れを持っていますが、私は私がやろうとしている私のコードは以下のことをどうやって行うことができるか考えていませんでした。

Vector3 position; 
    float[] newPosition4 = new float[4]; 
    position = obj.getPosition(); 
    float[] posVec4 = {0, 0, -8, 0.0f}; 
    float[] HeadViewMatrix_inv = new float[16]; 
    Matrix4 HeadViewMatrix4 = new Matrix4(); 
    HeadViewMatrix4.setAll(getCurrentCamera().getViewMatrix()); 
    HeadViewMatrix4 = HeadViewMatrix4.inverse(); 

    //Copy matrix to HeadViewMatrix array, 
    HeadViewMatrix4.toFloatArray(HeadViewMatrix_inv); 

    //Translation of viewMatrix 
    Matrix.multiplyMV(newPosition4, 0, HeadViewMatrix_inv, 0, posVec4, 0); 
    obj.setPosition(newPosition4[0], newPosition4[1], newPosition4[2]); 

だから誰でも私を助けることができます。

答えて

4

あなたが何を求めているのか分かっていれば、これはかなり簡単なことです。新しい行列を構築するか、現在の行列を単純に削除する必要があります(同一性を使う)。

A(-0.5, 0.0, 0.0)からB(0.5, 0.0, 0.0)に線を引くことによって同一性は、画面の中央に直線の垂直線を描画します。画面サイズの半分が中央に配置されます。

正三角形の投影座標を画面座標で使用して、一定のサイズの別のビュー(width/2height/2)と同じようにオブジェクトを中央に配置することをお勧めします。

ただし、この要素を描画するときに、常に表示できるようにするには、その深度バッファが無効になっていることを確認してください。

何らかの理由で、錐台行列を使用してオブジェクトを前面に維持し、場合によっては深度テストを維持したい場合は、同じ投影行列(錐台部分)を保持し、ビュー行列をアイデンティティカメラからのもの)。これらを設定することで、オブジェクトを絶対ゼロの前に置くだけです。(.0f, .0f, distanceToObject)

+0

ありがとう!私は私の360画像である世界の行列を見ることができるビュー行列をゲットしています。画像のビューを取得できるように現在の行列を削除するとその画像にオーバーレイを追加します。あなたの話しが自由であれば、スカイプやGmailで話すことができます。 –

+0

こんにちは、これで私を助けてください。 –

+0

あなたはビルボードをスクリーンスペースに入れたいので、スクリーンスペースでレンダリングするためにビュー変換も投影マトリックスも必要ありません。 Maticが提案した座標と非常に小さなz値を使用して、仮想カムの前でレンダリングします。 (つまり、xとyは標準化されたデバイス座標=スクリーンスペース座標になり、zは区間[近平面、遠方平面]のビット範囲の非線形奥行き値です。 – StarShine

2

キャンバスを使用したい場合は、私は簡単なソリューションを提供できます。

<RelativeLayout 
    android:id="@+id/layout_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <!-- Camera Preview --> 

    <FrameLayout 
     android:id="@+id/camera_preview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</RelativeLayout> 

SurfaceViewとCanvasをこのFrameLayoutに追加し、そのキャンバス内に任意のものを描画します。

+0

しかし、私は親を作ることを許可しないcardbaordviewまたは子供が私はこの問題をとにかく感謝した –

関連する問題