2015年1月11日日曜日

OpenGL

なんとなくプログラムにかかわるどうでもいいようなネタを書きなぐるようなブログになりつつありますが、今回は懲りずにOpenGLの話です。
OpenGLも触り始めたのは随分昔のことですが実際にあれこれ使ったことはありませんでした。
本格的にやろうにも実用的に重かったというのが正直なところでした。
ハードウェアもナシにテクスチャもないポリゴンを描画するだけでもリアルタイムで使うには程遠い感じだったのですが、それでもいろいろと遊んでは居ました。


で、時は流れに流れAndroidに実装されているOpenGL ESが結構使えそうなので実際に少し試し始めています。
普通のSurfaceViewを使ってシンプルな描画でも60FPSを出すのは処理を減らさないといけないのですが、GLSurfaceViewで書籍に載ってるものを入れてみたところただ立方体を表示させるものですが、余裕で60FPS出てて驚きました。しかも、これエミュレータです(笑)
エミュレータの設定の3Dグラフィックスのハードウェアを利用するように設定はしていますが、まさかの驚きです。(解像度は下げてますが、実行しているPCはおそらく現状では相当スペックが低い)

ただ最初に表示された形がどうも箱の内側しか描画されていないような感じだったので、回転させたところまさしく内部面しか描画されていませんでした。
OpenGLとDirectX系の軸座標やポリゴンの表面の判定が違っているのはわかっていたのですが、実際にどの方向か覚えていないので調べてみたところなぜか手元の書籍では逆方向になっていました。なので頂点定義を逆転させたところ、まともに表示されるようになりました。(ワールド座標の設定が抜けているだけかもしれませんけど)

さて回転するようになったついでに少し負荷をかけてみました。

立方体を描くクラスが整ったので、単純に描画するところで10×10個を並べてみました。
エミュレータで動かしたところやはり処理が落ちましたが、それでも40FPSぐらいは出ています。
実機で確認したところ、この程度では全く処理は変らず60FPSは出ている感じでした。恐るべし…。

0 件のコメント:

コメントを投稿