Androidアプリ開発 OpenGL フォグ [Android OpenGL]
本日の話題は「フォグ」である。3DCGにおいて、フォグといったテクニックは、遠くにあるものを「霧がかかっているよう」に白っぽく霞ませて表示する手法。
現実世界には、見えないようでいて、実は見えている「空気」というものがある。遠くにある物からの光は、それだけ空気の中を多く進んでやってくる。遠くにある物ほどぼやけた感じに見える。フォグをかければ、より現実に近い世界を表現することが可能になる。
実は、AREarthroidでもフォグをかけようと試みたのではあるが、視点位置が反映されず、フォグの導入は見送っていた。今回、あらためてチャレンジすることにした。
フォグをかけるのは簡単。glEnable(GL_FOG)として有効にすればよい。ただし、フォグのかけ方を指定しないといけない。サンプルでは、とりあえずGL_LINEARのフォグをかけることにする。
さらに、GL_LINEARでは、フォグがかかり始める視点からの距離と、終端の距離を指定する必要がある。
もうひとつ、フォグの色をGL_FOG_COLORで設定する。
フォグの色を背景色と同じ黒にしたので、背景に溶け込むようになっていくはず。
フォグのかかり始めは、後列のドロイド君がいる辺りからに設定。その奥10までいったところで完全に黒になる。
スライドにより左右、上下に視点が移動するが、これだと遠い、近いを制御しずらいので、X軸方向の移動をやめ、Z軸方向に変更する。Y軸方向はそのまま。
これで、左右にスライドすることで、Z方向に視点が動くようになる。
では、フォグの効果をみてみよう。
ドロイド君を視点から離すと黒くなっていく。逆に近付ければフォグの黒は薄くなっていく。フォグの色を白にすれば、霞んでいくようにみえる。ただ、その場合は背景色も白にしないとおかしいでしょう。
話は変わって、AREarthroidである。AREarthroidでもフォグをかけようとしたのではあるが、視点からの距離ではなく、原点(0,0,0)からの距離でフォグがかかってしまう状況であった。
つまり、視点を変えてもフォグのかかり具合が変化しなかったので、グラデーションはかかっているが、視点位置からの計算になっていないので、「何かおかしい絵柄」になっていた。
フォグのサンプルでも同じようにフォグをかけているし、視点の移動もしている。なんでAREarthroidではできないのじゃ?とデバッグを始めた。
違いは、glLookAtの呼び出しであることがわかった。サンプルでは、
といった順番で処理を行っている。
AREarthroidでは、GL_MODELVIEWでマトリックスを選択する前で、行っている。本当のコードではないが、以下のような感じ。
gluLookAtは、視点用のGL_PROJECTIONマトリックスに対して値を設定するんじゃないの?どうも違うっぽいなぁ。
むむむ。なんとしたことか。
AREarthroidでは、視点を方位で回転させるようなことをしている。じゃないとコンパスにならないから。実際、ちゃんと方角に合わせて地球は回転している。
よくわからんなぁ。
ちょっと順番かえてみよ。
おお、これでも同じように表示されるじゃないか。しかし、なんか微妙に違うかも...
むしろ、いい感じになっている。
じゃあこれでフォグかけたら... あら真っ白。開始、終了距離を調整して...
あらま。ちゃんとフォグがかかった。
あー、またバージョンアップせねば。
サイト内を検索
現実世界には、見えないようでいて、実は見えている「空気」というものがある。遠くにある物からの光は、それだけ空気の中を多く進んでやってくる。遠くにある物ほどぼやけた感じに見える。フォグをかければ、より現実に近い世界を表現することが可能になる。
実は、AREarthroidでもフォグをかけようと試みたのではあるが、視点位置が反映されず、フォグの導入は見送っていた。今回、あらためてチャレンジすることにした。
フォグをかけるのは簡単。glEnable(GL_FOG)として有効にすればよい。ただし、フォグのかけ方を指定しないといけない。サンプルでは、とりあえずGL_LINEARのフォグをかけることにする。
さらに、GL_LINEARでは、フォグがかかり始める視点からの距離と、終端の距離を指定する必要がある。
もうひとつ、フォグの色をGL_FOG_COLORで設定する。
// フォグ gl.glEnable(GL10.GL_FOG); gl.glFogfv(GL10.GL_FOG_COLOR, black, 0); gl.glFogx(GL10.GL_FOG_MODE, GL10.GL_LINEAR); gl.glFogf(GL10.GL_FOG_START, 3.0f); gl.glFogf(GL10.GL_FOG_END, 10.0f);
フォグの色を背景色と同じ黒にしたので、背景に溶け込むようになっていくはず。
フォグのかかり始めは、後列のドロイド君がいる辺りからに設定。その奥10までいったところで完全に黒になる。
スライドにより左右、上下に視点が移動するが、これだと遠い、近いを制御しずらいので、X軸方向の移動をやめ、Z軸方向に変更する。Y軸方向はそのまま。
@Override public boolean onScroll(MotionEvent event1, MotionEvent event2, float distx, float disty) { //eyepos[0] += distx * 0.01; eyepos[1] += disty * 0.01; eyepos[2] += distx * 0.01; return true; }
これで、左右にスライドすることで、Z方向に視点が動くようになる。
では、フォグの効果をみてみよう。
ドロイド君を視点から離すと黒くなっていく。逆に近付ければフォグの黒は薄くなっていく。フォグの色を白にすれば、霞んでいくようにみえる。ただ、その場合は背景色も白にしないとおかしいでしょう。
話は変わって、AREarthroidである。AREarthroidでもフォグをかけようとしたのではあるが、視点からの距離ではなく、原点(0,0,0)からの距離でフォグがかかってしまう状況であった。
つまり、視点を変えてもフォグのかかり具合が変化しなかったので、グラデーションはかかっているが、視点位置からの計算になっていないので、「何かおかしい絵柄」になっていた。
フォグのサンプルでも同じようにフォグをかけているし、視点の移動もしている。なんでAREarthroidではできないのじゃ?とデバッグを始めた。
違いは、glLookAtの呼び出しであることがわかった。サンプルでは、
gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); GLU.gluLookAt(gl, eyepos[0], eyepos[1], eyepos[2], 0, 0, 0, 0, 1, 0);
といった順番で処理を行っている。
AREarthroidでは、GL_MODELVIEWでマトリックスを選択する前で、行っている。本当のコードではないが、以下のような感じ。
gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); GLU.gluPerspective(gl, 50f, aspect, 0.01f, 100f); GLU.gluLookAt(gl, eyepos[0], eyepos[1], eyepos[2], 0, 0, 0, 0, 1, 0); gl.glRotatef(azimuth, ox, oy, oz); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity();
gluLookAtは、視点用のGL_PROJECTIONマトリックスに対して値を設定するんじゃないの?どうも違うっぽいなぁ。
むむむ。なんとしたことか。
AREarthroidでは、視点を方位で回転させるようなことをしている。じゃないとコンパスにならないから。実際、ちゃんと方角に合わせて地球は回転している。
よくわからんなぁ。
ちょっと順番かえてみよ。
gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); GLU.gluPerspective(gl, 50f, aspect, 0.01f, 100f); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); GLU.gluLookAt(gl, eyepos[0], eyepos[1], eyepos[2], 0, 0, 0, 0, 1, 0); gl.glRotatef(azimuth, ox, oy, oz);
おお、これでも同じように表示されるじゃないか。しかし、なんか微妙に違うかも...
むしろ、いい感じになっている。
じゃあこれでフォグかけたら... あら真っ白。開始、終了距離を調整して...
あらま。ちゃんとフォグがかかった。
あー、またバージョンアップせねば。
サイト内を検索
2012-04-16 06:27
nice!(0)
コメント(0)
Copyright Atsushi Asai Google+朝井淳
[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2015/03/03
- メディア: 単行本(ソフトカバー)
Access クエリ 徹底活用ガイド ~仕事の現場で即使える
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2018/05/25
- メディア: 大型本
コメント 0