SSブログ

Androidアプリ開発 OpenGL ポイントスプライト 点の大きさ [Android OpenGL]

前回、ポイントスプライトでドロイド君を、たくさんの星のように表示させることができた。
しかし、「何かがおかしい」ことにお気付きだろうか。



えーと、何がおかしいかというと、どの点も同じ大きさで表示されるから。つまり遠近法が無視されているっていうこと。位置座標はちゃんと3次元なので視点の移動にともなっての移動は、ちゃんと遠近法が効いている。しかし、大きさは、glPointSizeで指定されたままの大きさで変化しないので、「なんかおかしい」っていうことになっている。

ということは、glPointSizeで指定する点の大きさを視点からの距離で計算してやればOK?

その通りです。
ですが、もっと簡単にできてしまう。OpenGL 1.1の機能になってしまうが、glPointParameterfvでGL_POINT_DISTANCE_ATTENUATIONを指定してやるだけで点の大きさが遠近法で計算されるようになる。

では、さっそくやってみよう。パラメータの設定は1回だけでよいので、onSurfaceCreatedでやってしまう。

		@Override
		public void onSurfaceCreated(GL10 gl, EGLConfig config) {
			gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
			gl.glClearDepthf(1.0f);
			eyepos[0] = 0;
			eyepos[1] = 0;
			eyepos[2] = 3;
			Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
			// テクスチャを生成
			int textures[] = new int[1];
			gl.glGenTextures(1, textures, 0);
			gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
			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);
			GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
			models.add(new Model(1, 0, 0));
			models.add(new Model(-1, 0, 0));
			models.add(new Model(1, 0, -2));
			models.add(new Model(-1, 0, -2));
			ByteBuffer b = ByteBuffer.allocateDirect(3 * 4);
			b.order(ByteOrder.nativeOrder());
			FloatBuffer distance = b.asFloatBuffer();
			distance.put(new float[]{0f,0f,1f});
			distance.position(0);
			((GL11)gl).glPointParameterfv(GL11.GL_POINT_DISTANCE_ATTENUATION, distance);
		}


glPointParameterfvを呼び出すには、GL11にキャストしないといけない。OpenGL1.0しかサポートしていない端末だと、多分エラーになる(CastExceptionかなぁ...ならないかも知れない)。 その辺りはケアーしていないので注意して欲しい。
glPointParameterfvの引数がFloatBufferしか受け付けないようなので、バッファを作るのが面倒なことになっているが、基本、0,0,1といったパラメータの値をセットしているだけである。

で、動かしてみたのが、以下の動画。



ちゃんと近くにあれば大きく、遠くにあれば小さく表示されるようになった。




サイト内を検索

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。



Copyright Atsushi Asai Google+朝井淳
[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)

イラストで理解 SQL はじめて入門

イラストで理解 SQL はじめて入門

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/05/16
  • メディア: 単行本(ソフトカバー)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/03/03
  • メディア: 単行本(ソフトカバー)

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/05/25
  • メディア: 大型本

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。