2010-12-29 26 views
2

AndroidでOpenGLで透明テクスチャをレンダリングする方法の解決策を探しています。明らかに、他の人は私よりも運が多かったですが、さまざまな解決策(例:Transparent texture in OpenGL ES for Android)を試した後、私はまだそれを達成できません。ここでAndroidでOpenGL ESで透明テクスチャを表示する際の問題

は、私の基本的な設定です:

 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); 
    gl.glClearColor(0.0f, 0.0f, 0.0f, 1); 
    gl.glShadeModel(GL10.GL_FLAT); 
    gl.glDisable(GL10.GL_DEPTH_TEST); 
    gl.glEnable(GL10.GL_TEXTURE_2D); 
    gl.glDisable(GL10.GL_DITHER); 
    gl.glDisable(GL10.GL_LIGHTING); 

    gl.glTexEnvx(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, 
      GL10.GL_MODULATE); 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
    gl.glViewport(0, 0, w, h); 
    gl.glMatrixMode(GL10.GL_PROJECTION); 
    gl.glLoadIdentity(); 
    GLU.gluOrtho2D(gl, -ratio, ratio, -1, 1); 

テクスチャが...

gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName); 

    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, 
      GL10.GL_NEAREST); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, 
      GL10.GL_LINEAR); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, 
      GL10.GL_CLAMP_TO_EDGE); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, 
      GL10.GL_CLAMP_TO_EDGE); 
    gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, 
      GL10.GL_MODULATE); 
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 

を介してロードさ...これはプリマルチアルファに起因する問題につながることのヒントがありますされています。しかしReplicaIslandはGLUtils関数も使用しているので、ゲームは透明な画像に問題がないようです。

アルファチャンネル(PNG)でテクスチャを描画すると、黒く表示されます。アルファなしのテクスチャはそれぞれの色で正しく描画されます)。私は、すなわち

gl.glShadeModel(GL10.GL_FLAT); 
    gl.glEnable(GL10.GL_BLEND); 
     gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA); 
    gl.glColor4x(0x10000, 0x10000, 0x10000, 0x10000); 

私も

gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 

結果は、テクスチャが何のすべてで表示されていることを常にではありませんしてみてください、この1与えた、様々なglBlendFuncは運なしで呼び出して適用される(完全に透明に?)。

ReplicaIslandプロジェクトからテスト用の画像が使用されます。これらの画像は標準のPNGです。これは、使用されるテクスチャが、2のべき乗則(さまざまな投稿で提供される別のソリューション)に準拠していることも意味します。私はReplicaIslandがdraw_texture拡張に頼っているようだが、VBOを使う必要がある(回転を適用できるようにする)という違いがある。

大変お手伝いいたします。 ありがとう ベン

答えて

2

[OK]をデバッグの別の日が行って最後に私のエラーが見つかりました。ビットマップのカラースキームglBlendFuncなどとは何の関係もありませんでした。

2つのテクスチャ関数呼び出しで、GL_FIXEDGL_FLOATを使いこなすことが判明しました。

関連する問題