2012-04-21 6 views
0

enter image description hereオープンGLでテキストを描画すると、私はこのfont.pngを使用してい

明らかではないが、ゲームでそれはclear.Howは私がにテキストをレンダリング?私のゲームでクリアテキストを描画することができます見ていませんDraw text in OpenGL ESのようなテクスチャは、私のソリューションより論理的ですか?

+0

画像を投稿するか、問題をよりよく記述してください。それは透明ではないという意味ですか?それともぼやけているのでしょうか? – Tim

+0

@Tim私はそれがぼやけていることを意味します。それは明らかではありません。 – droidmachine

+0

問題のゲーム内イメージと、それを描画するために使用するコードについて、より多くの助けを得ることができます。そうであるように、この質問に答える方法はありません。 – Tim

答えて

0

OpenGLコンテキストのブレンドを有効にしましたか?

)(OnSurfaceCreatedでこのコードを試してみてください。

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

編集: このコードは、あなたの質感と連携して動作します。 ちょうど/生/ "text.png" にあなたのテクスチャの名前を変更し、解像度に入れます

////////////////////////////// 
// TextureTestActivity.java 

package com.TextureTest.TextureTest; 
import android.app.Activity; 
import android.os.Bundle; 
import android.content.Context; 
import android.opengl.GLSurfaceView; 

public class TextureTestActivity extends Activity { 
    private GLSurfaceView mGLView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mGLView = new TextureTestSurfaceView(this); 
     setContentView(mGLView); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     mGLView.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     mGLView.onResume(); 
    } 
} 

class TextureTestSurfaceView extends GLSurfaceView { 
    public TextureTestSurfaceView(Context context) { 
     super(context); 
     setEGLConfigChooser(false); 
     setRenderer(new TextureTestRenderer(context)); 
    } 
} 

////////////////////////////// 
// TextureTestRenderer.java 
package com.TextureTest.TextureTest; 
import java.io.InputStream; 
import java.nio.ByteBuffer; 
import java.nio.ByteOrder; 
import java.nio.FloatBuffer; 
import javax.microedition.khronos.egl.EGLConfig; 
import javax.microedition.khronos.opengles.GL10; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.opengl.GLES10; 
import android.opengl.GLSurfaceView; 
import android.opengl.GLU; 
import android.opengl.GLUtils; 
public class TextureTestRenderer implements GLSurfaceView.Renderer { 
    Context context; 
    int textureID; 

    float vertices[] = { 
      -1.0f, 1.0f, 0.0f, 
      -1.0f, -1.0f, 0.0f, 
      1.0f, 1.0f, 0.0f, 
      1.0f, -1.0f, 0.0f 
      }; 

    float texcoords[] = { 
      0.0f, 0.0f, 
      0.0f, 1.0f, 
      1.0f, 0.0f, 
      1.0f, 1.0f, 
      }; 

    FloatBuffer texCoordBuffer; 
    FloatBuffer vertexBuffer; 

    TextureTestRenderer(Context context) { 
     this.context = context; 
    } 

    public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
     // set gl options 
     gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); 

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

     // create texture 
     int textures[] = new int[1]; 
     gl.glGenTextures(1, textures, 0); 
     textureID = textures[0]; 

     gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
     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); 

     InputStream is = context.getResources().openRawResource(R.raw.text); 
     Bitmap textBitmap = BitmapFactory.decodeStream(is); 

     GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, textBitmap, 0); 
     textBitmap.recycle(); 

     // create vertex and texcoord buffers 
     ByteBuffer vbb = ByteBuffer.allocateDirect(4 * 3 * 4); 
     vbb.order(ByteOrder.nativeOrder()); 
     vertexBuffer = vbb.asFloatBuffer(); 

     ByteBuffer tbb = ByteBuffer.allocateDirect(4 * 2 * 4); 
     tbb.order(ByteOrder.nativeOrder()); 
     texCoordBuffer = tbb.asFloatBuffer(); 

     for (int v = 0; v < 4; v++) 
      for(int c = 0; c < 3; c++) 
       vertexBuffer.put(vertices[v * 3 + c]); 

     for (int v = 0; v < 4; v++) 
      for(int c = 0; c < 2; c++) 
       texCoordBuffer.put(texcoords[v * 2 + c]); 

     vertexBuffer.position(0); 
     texCoordBuffer.position(0); 

     // set up view matrices 
     gl.glMatrixMode(GL10.GL_MODELVIEW); 
     gl.glLoadIdentity(); 

     GLU.gluLookAt(gl, 0.0f, 0.0f, 5.0f, 
          0.0f, 0.0f, 0.0f, 
          0.0f, 1.0f, 0.0f); 
    } 

    public void onDrawFrame(GL10 gl) { 
     gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

     gl.glEnable(GL10.GL_TEXTURE_2D); 
     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
     gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 

     gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID); 
     gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
     gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texCoordBuffer); 

     gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); 
    } 

    public void onSurfaceChanged(GL10 gl, int width, int height) { 
     GLES10.glViewport(0, 0, width, height); 
    } 
} 
+0

申し訳ありませんが、変更はありません。ブリングが有効になっています.4チャンネルは有効にしましたが、変更はありません。解決策が見つかりません。 – droidmachine

+0

あなたは答えを受け入れました...それはあなたがそれが働いているという意味ですか? – bitwise

+0

私はすべての方法を試したと思うので、受け入れられます。私はキャンバスに描画しようとし、このテクスチャを使用すると思います。どちらが便利なのでしょうか?キャンバスに描画するか、ビットマップを使用しますか? – droidmachine

0

これは少し遅れていることはわかっていますが、これはフィルタリングの問題のようです。 テクスチャに「最も近い」フィルタリング(「線形」の代わりに)を使用してみてください。レンダリングする前に

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_NEAREST); 

コールこの、あなたは再び両方の方法を呼び出すことにより、レンダリング、しかしGL10.GL_NEARESTの代わりにGL10.GL_LINEARを使用した後、「リニア」フィルタリングに戻って設定することができます。これはで行うことができます。

あなたはしかし、両方の呼び出しを必要としない、最初のものはテクスチャが、それは実際の解像度だ、第二は、それが大きなレンダリングされるときのためであるよりも、小さいレンダリングされたときのためです。 私の経験では、テキストを読みやすくするためには、より小さなレンダリング時には「最も近い」フィルタリングを使用し、より大きなレンダリング時には「リニア」を使用することをお勧めします。それは主観的なものなので、実験して、あなたに最適なものを見つけるべきです。

関連する問題