2011年11月30日

クォータニオンによるボーンの回転

クォータニオンとボーンについての解説は省きます。

クォータニオンを使って回転を合成し、ボーン1にはボーン1の回転が、ボーン2にはボーン1とボーン2の回転、ボーン3にはボーン1とボーン2とボーン3の回転を与えます。
これにより、人間の関節やロボットアームのような複雑な動きを表現する事が可能になります。

クォータニオンによる回転の合成は、クォータニオンの積の計算によって求まります。 ただしOpenGL ESの場合、クォータニオンのままでは座標変換が行えないため、クォータニオンを座標変換行列に変換する必要があります。
※動画キャプチャの都合上、端末(SC-01C)で遅回しして編集で早回し




全てのボーンが同じ原点を共有して回転してしまっています。
パタパタママのようでもありますが、表現したい事はこれではありません。


2011年11月23日

OpenGL ES 2.0と1.1の処理速度を比較

OpenGL ES 2.0と同程度の処理をES 1.1で実装し、処理速度を比較しました。 全く同じ処理をしているとは言えないため、厳密な比較ではありませんが。
※端末はSC-01C



左がOpenGL ES 1,1、右がOpenGL ES 2.0です。
オブジェクトを200個描画し、秒あたりのポリゴン数を計測しました。TPSはtriangles/sec。

予想に反し、OpenGL ES 2.0の方が処理性能が高くなっています。
OpenGL ES 2.0がプログラムシェーダだからと言って、処理速度が見劣りするという訳ではないようです。

このテストは平行光源を一つのみ配置して行いましたが、OpenGL ES 1.1では最大8つライトを配置できます。
OpenGL ES 1.1で8つの平行光源を配置して測ったところ、このような結果でした。


少し処理速度が落ちています。
一方、OpenGL ES 2.0で光源を増やせば、処理速度が落ちるのは自明です。
つまりどちらを採用するにせよ、光源は少ない方が処理速度は上がる、という事になります。

2011年11月22日

OpenGL ES 2.0 test4(for Android)

物体の質感を表現する。
※動画キャプチャの都合上、端末(SC-01C)で遅回しして編集で早回し

 


側面はペイントでベタ塗りしただけの手抜きです。

1つ目は拡散光のみを表現したモデル、
2つ目は環境光、拡散光、反射光を表現したモデルです。

反射光によって金属のような光沢感が表現され、絵がくるくる回るだけの状態よりは少しリアリティが増しています。


OpenGL ES2.0は、これらのシェーディング処理をシェーダプログラムで実装しますが、環境光と反射光のコードを追加した結果、フレームレートが60→40台に低下しました。
(動画は遅回しのため変化していません)

実際に追加したコードは僅か2、3行で、それも頂点シェーダ側です。それでもここまで速度低下を招くのは意外でした。

OpenGL ES 1.1よりも、上位のOpenGL ES 2.0の方が全てにおいて優れている、という訳ではないのかもしれません。同程度のシェーディング処理だとパフォーマンス的にどちかが優位なのか、比較検討する必要がありそうです。

2011年11月18日

OpenGL ES 2.0 test3(for Android)

テクスチャを貼れるようにする。
※動画キャプチャの都合上、端末(SC-01C)で遅回しして編集で早回し

 

テクスチャとフラットシェーディングだけでもそれなりにリアルな絵になります。
繰り返し見てたら目が回りました。

カメラビューにこの矢印を重ねて、拡張現実的な道案内アプリなんてのもいいかもしれません。
更に空間認識技術で、GPSの測定誤差を補正してくれたり、
道路に誘導ラインが表示できるようになれば、地図アプリなんて不要になりそう。

2011年11月15日

OpenGL ES 2.0 test2(for Android)

処理能力を確認するため、ポリゴン数の多いオブジェクトを表示する。
※動画キャプチャの都合上、端末(SC-01C)で遅回しして編集で早回し


これでポリゴン数380。
60fpsを下回ってるので、既に処理能力の限界に達している事が分かります。
ただ高速化の手法は使ってないので、実際はもっと処理能力を高められるはずです。
 
当初は数万ポリゴンのオブジェクトを作成したものの、定数データが多すぎてコンパイルエラー。
これはAndroidというより、Java自体が65,536バイト以上の定数データを扱えないようです。
1000ポリゴン程度でもこの上限に引っかかるため、ちょっと複雑なオブジェクトになるとソースにデータを直接埋め込むようなお手軽方法は使えない、という事になります。


2011年11月14日

OpenGL ES 2.0 test1(for Android)

OpenGL ES 2.0(for Android)の学習を始めました。

まずは、立方体をフラットシェーディングで表示する。
サンプルプログラムをちょっと変えて楽しようと思いましたが、手こずったので最初からプログラムを組みました。
動画キャプチャの都合上、端末(SC-01C)で遅回しして編集で早回しです。




参考文献。
巻末のAndroid用プログラムはES 1.0用ですが、サイトからES 2.0用プログラムがダウンロードできます。
ES 2.0に関してはまだネットの情報が少ないのでもっと書籍が欲しいところです。

2011年11月7日

HomeCompass::Update Ver.1.0.6

Ver.1.0.6版を公開しました。

方位センサ異常を無視する設定にすると、方位センサ異常を通知するメッセージが表示される不具合を修正しました。


2011年11月5日

HomeCompass::Update Ver.1.0.5

Ver.1.0.5版を公開しました。


コンパスのオーバーレイ表示

ホームコンパスを、他のアプリの上に重ねて表示できるようになりました。
目標の方向を確認しつつ、他のアプリを操作できます。




※Googleマップ上に重ねて表示


2011年11月2日

Study Timer::0.9.0.15リリース

時刻に秒表示を追加しただけです。


大きさが変更できて、秒が表示できるデジタル時計ソフトが必要だったんですが。
探したんですが見つからなかったので、自分のソフトを修正して使っています。

Vectorよりダウンロードできます。