2013年9月16日月曜日

libGDXでOpenGL ES 2.0でシェーダ動いた

やればやるほど出口の見えなかったOpenGLでのグラフィック実装ですが,
libGDXを使いはじめてようやく軌道に乗ってきました.

libGDXはJavaベースでOpenGL ESを使ったゲームを作るライブラリですが,
マルチプラットフォームで開発できるので,PC上でもOpenGL ES 2.0で
テストができて超ラクチン.今までテスト環境に困ってたのは何だったんだ.

libGDXは,工程はラップせずに手段をラップする感じのフレームワーク.
ですので自由度がかなり高いと思われる一方,私のような初心者が触るには
敷居のほうも正直高い.
日本語のドキュメントはあんまりないので,主に海外のサイトを見て回って
使い方を覚える感じです.

OpenGLの使い方と並行して,キャラクターの書き込みプロセスや
状態遷移に関するメッセージの渡し方を考えてると,
何気にそれっぽくオブジェクト指向で書けてる気がしてきました,

で,とりあえずグラフィック面では「ここまで出来れば一段落」と思っていた
フラグメントシェーダの実装を形にするところまで辿り着きました.

先日の記事でGLSL Sandboxに投稿したエフェクト.





Galleryを覗いてみると,誰かがforkして色々と進化しとるやないか!w




 せっかくなのでこれらの中からエフェクトを拝借してテスト.

動きましたね〜.

ただ,全ピクセルについて(線との相対距離を測る) × (線の本数)
なんてことをやらせてるから,当然のように重い.
Androidの方はバッファが勝手にダイエットされてるらしく解像度が落ちてます.
相対距離を計算してるからこそ,線が光り輝くように演出できてるわけですが,
くやしいのでもう少し高速化について考えようと思います.

どの端末でも見え方が同じになるようにするために,
ゲーム領域を16:10に合わせるように座標系を統一していて,
余った部分をレターボックス化しています.
Androidのほうで画面の縁に見えてる白線がそれなんですが,
その領域外でも背景(シェーダのエフェクト)は表示されてるところがミソ.
(Nexus 7はディスプレイ解像度のアスペクト比は16:10ですが,
ナビゲーションバーに64ピクセル取られるので有効領域は15.2:10です)

ってこんな細かいことやるよりさっさと作り進めろって話ですが.

0 件のコメント :

コメントを投稿