OpenGLでは直接文字表示ができないらしいので文字を画像として
貼りたいのですがそのプログラム貼り付けます。
テクスチャとオブジェクトの関連付のみでほかは省略します。
gl10.glClear(GL10.GL_COLOR_BUFFER_BIT); //GL10のインスタンスのgl10は初期化済み
gl10.glEnable(GL10.GL_TEXTURE_2D);
gl10.glEnable(GL10.GL_BLEND);
gl10.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
int[]
textureIds=new int[1];
gl10.glGenTextures(1,textureIds,0);
int
textureId=textureIds[0];
Bitmap
bitmap=Bitmap.createBitmap(512,512,Bitmap.Config.ARGB_8888);
Canvas
canvas=new Canvas(bitmap);
canvas.drawARGB(0, 0, 0, 0); //文字の画像の背景を透明にする
Paint paint=new Paint();
paint.setColor(Color.BLACK);
paint.setTextSize(30);
canvas.drawText(text,canvas.getWidth()/2,170,paint);
リソースに入っている普通(文字描画したものではない)の画像はちゃんと描画されますが fkmさんがいうのは上のプログラムで画像を作りそれをリソースに入れてそこから読み込み描画するということですか?
リソースに入っている普通(文字描画したものではない)の画像はちゃんと描画されますが fkmさんがいうのは上のプログラムで画像を作りそれをリソースに入れてそこから読み込み描画するということですか?
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/BrS3n1ehrWQJ にアクセスしてください。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
1は
すみませんさっき書いたプログラムにはglColor4fが書いてありましたが実際動かす方には書いてありませんでした。
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/amsnNwDzRP8J にアクセスしてください。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
public class MyRenderer implements Renderer {
public void onSurfaceCreated(GL10 gl10, EGLConfig config) {}
public void onSurfaceChanged(GL10 gl10, int width, int height) {}
float alpha = 1.0f;
public void onDrawFrame(GL10 gl10) {
gl10.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl10.glEnable(GL10.GL_TEXTURE_2D);
gl10.glEnable(GL10.GL_BLEND);
gl10.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
int[] textureIds=new int[1];
gl10.glGenTextures(1,textureIds,0);
int textureId=textureIds[0];
Bitmap bitmap=Bitmap.createBitmap(512,512,Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(bitmap);
canvas.drawARGB(0, 0, 0, 0);
Paint paint=new Paint();
paint.setColor(Color.BLACK);
paint.setTextSize(30);
canvas.drawText("サンプル",canvas.getWidth()/2,170,paint);
gl10.glBindTexture(GL10.GL_TEXTURE_2D,textureId);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0,bitmap,0);
gl10.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);
gl10.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_NEAREST);
bitmap.recycle();
gl10.glBindTexture(GL10.GL_TEXTURE_2D, 0);
gl10.glBindTexture(GL10.GL_TEXTURE_2D,textureId);
gl10.glColor4f(0,0,0,alpha);
alpha -= 0.1f;
if (alpha < 0) alpha = 1.0f;
gl10.glClearColor(0.0f, 1.0f, 1.0f, 1.0f);
gl10.glClear(GL10.GL_COLOR_BUFFER_BIT);
float uv[] = { 0.0f, 0.0f,
0.0f, 1.0f,
1.0f, 0.0f,
1.0f, 1.0f,
};
ByteBuffer bba = ByteBuffer.allocateDirect(uv.length * 4);
bba.order(ByteOrder.nativeOrder());
FloatBuffer fbuv = bba.asFloatBuffer();
fbuv.put(uv);
fbuv.position(0);
gl10.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl10.glTexCoordPointer(2, GL10.GL_FLOAT, 0, fbuv);
float positions[] = {
-1.0f, 1.0f, 0.0f,
-1.0f, -1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
};
ByteBuffer bbb = ByteBuffer.allocateDirect(positions.length * 4);
bbb.order(ByteOrder.nativeOrder());
FloatBuffer fb = bbb.asFloatBuffer();
fb.put(positions);
fb.position(0);
gl10.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl10.glVertexPointer(3, GL10.GL_FLOAT, 0, fb);
gl10.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
}
}
やはりBitmapで文字のテクスチャを作った部分が真っ白に表示されるのですがOpenGLをAndroidで使う場合、
やはりBitmapで文字のテクスチャを作った部分が真っ白に表示されるのですがOpenGLをAndroidで使う場合、画面が白くなるのはどういった原因が考えられますか?サイズを2のべき乗にすべきなのはクリアしてます。