2017-10-31 18 views
0

Googleが提供するArcoreのデモコードを使用していて、Android Studioで作業していましたが、この作業を完了できる場合はUnityを使用しないでください。ARcoreでは、どのようにテクスチャをプレーンに表示するのですか?

デフォルトでは、プレーンは白い三角形で表示され、負のスペースは透明です。私はその計画を、環境全体にタイル張りすることができるテクスチャに変更したいと考えています。この例は、芝生のテクスチャです。

プレーンで使用するデフォルトの画像は、trigrid.pngというファイルで、HelloArActivity.javaで定義されています。

https://github.com/google-ar/arcore-android-sdk/blob/master/samples/java_arcore_hello_ar/app/src/main/java/com/google/ar/core/examples/java/helloar/HelloArActivity.java

私は草の質感だったとをfloor.png それを呼ばれる画像ファイルとそれを置き換えることを試みました。これはちょうどすべて白く見え、まったく芝生を表示しません。

 } 
    try { 
     mPlaneRenderer.createOnGlThread(/*context=*/this, "floor.png"); 
    } catch (IOException e) { 
     Log.e(TAG, "Failed to read plane texture"); 
    } 

私はdrawPlanes機能に

  GLES20.glEnable(GLES20.GL_BLEND); 

を追加しようとしたが、それは助けていないようでした。私はdrawPlanesの色の変更についてもコメントしました。

 //GLES20.glClearColor(1, 1, 1, 1); 
    //GLES20.glColorMask(false, false, false, true); 
    //GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); 
    //GLES20.glColorMask(true, true, true, true); 

テクスチャの表示に必要なものが不明です。それは、plane_fragment.shaderファイルと関係があるかもしれませんが、私はそれらの経験がありません。

洞察力があれば助かります。

答えて

1

シェーダは非常に重要です。 OpenGLでグラフィックスプログラミングをしたいのであれば、少なくともシェーダについて知っておく必要があります。これらは、フレームごとに各ピクセルの色を決定するためにグラフィックス処理装置(GPU)上で動作するプログラムです。私はシェイダーへの簡単な紹介はここにあります:https://youtu.be/AyNZG_mqGVE

あなたの質問に答えるには、テクスチャを描画し、他の色と混ざらない新しいフラグメントシェーダを使用できます。これは短時間で汚れたソリューションです。長期的には、使用されなくなった変数が一律にの変数を参照しないようにコードをクリーンアップしてください。具体的に

  1. src/main/assets/rawディレクトリにplane_simple_fragment.shaderと呼ばれる新しいファイルを作成します。

  2. エディタでそれを開き、次のコードを追加します。

    uniform sampler2D u_Texture; 
    varying vec3 v_TexCoordAlpha; 
    
    void main() { 
        gl_FragColor = texture2D(u_Texture, v_TexCoordAlpha.xy); 
    } 
    
  3. その後R.raw.plane_simple_fragmentR.raw.plane_fragmentを交換することにより、新しいシェーダへPlaneRenderer変更インチ

+0

これは機能しました。これを手伝ってくれてありがとう。この新しいシェーダによってテクスチャが表示されました。 – bobsburgers129

+0

ありがとう!今、PlaneRendererの1)で変更する必要があるのは、このテクスチャを1回だけ表示することです。2)サイズを定義します。3)平面上の位置を定義しますか?ありがとう! –

関連する問題