Raspberry Pi
Raspberry PiでOpenGL事始め
ここまでVimに慣れながらC++でプログラムをする環境を整えてきました。.cppや.hなどの依存関係を解決するメイクファイルも自動化の道を作ってきました。これで少なくとも「C++で分割自動コンパイル」というプログラム環境が出来た事になります…多分(^-^;
そこで、当初の目的であるRaspberry Piで3D描画をする段階に進みます。
Raspberry PiのGPUはOpenGL ES2を動かす事ができます。OpenGLは言わずと知れた3D描画ライブラリで、様々なプラットフォームで動作する「クロスプラットフォームライブラリ」であるのが特徴です。この辺りはDirectXと一線を画する所ですね。OpenGL
ESはOpenGLを描画パワーが貧弱な携帯電話等でも動くようにしたOpenGLのサブセットです。OpenGL
ESはシェーダの機能が無く、いわゆる「固定機能」という範疇の描画しかできませんでしたが、OpenGL
ES2になってその固定機能をやめてシェーダ描画に切り替えました。
では、Raspberry PiでOpenGL ES2を使って3Dのモデルを描画するには具体的にどうしたら良いか?少しずつ調べながら実装していきます。
@ サンプルソース「hello_triangle」
調べてみると、Raspberri PiにはOpenGL ES2のサンプルプログラムがいくつか入っているようです。場所は「/opt/vc/src/hello_pi/」です。その中にある「hello_triangle」が良さそうに思いました。
hello_piフォルダ内にあったREADMEを見ると、最初にlibsフォルダ内のライブラリをメイクする必要があるようです。hello_piディレクトリで以下のコマンドを入力します:
make -C libs/ilclient/
make -C libs/vgfont/
各フォルダにそれぞれコードとMakefileが入っていて、それをmakeしているだけですね。これでサンプルを動かすのに必要なライブラリファイルが作られるようです。
次にhello_triangleサンプルをメイクしてみます。これも上と同様で、
make -C hello_triangle
とします。するとコードのコンパイルとリンクが走り、hello_triangleディレクトリ内に「hello_triangle.bin」という実行可能ファイルが作成されます。
では、hello_triangleディレクトリに移動して、「./hello_triangle.bin」コマンドで実行してみます!
…
…あ、あれ?
この画面のままし〜んとしています。ん?ん?
もしや!っと思いRaspberry Piをモニターに直接繋いで見てみました:
出てるー!しかし、なんという微妙な状況(>_<)
今Raspberry Piに対してはVNCを通して操作やプログラミングをしています。つまりVNCクライアント画面(Windowsで見ています)には上の絵が送られてきていないという事です。え〜〜、それじゃスクリーンショット撮れないじゃん(怒)。
OpenGLのプログラムはこれで出来ると言えばできるんですが…ん〜。解決できるかちょっと調べてみます。(調査中)…、うん、ちょっと無理(^-^;;;。えーと、少し予定を変更して、Raspberry
Pi上でスクリーンショットを取る方法を調べてみます。
A Raspberry Piでスクリーンショット...だけど...
ネットは便利、すぐに見つかりました。scrotというパッケージをインストールするとスクリーンショットが撮れるようです:
sudo apt-get install scrot
これでスナップショットを取るにはターミナルから、
scrot
と打ち込むだけです。するとカレントディレクトリにPNG形式でファイルが保存されます。
保存されるんですがぁ、残念ながら上のサンプルを再生している状態でスナップショットを撮っても、映るのはデスクトップの画面で、OpenGLが描画されている絵は撮れませんでした。しおしお…orz
仕方ありません。何か方法がわかるまで、しばらくデジカメ撮影です。(方法ご存知の方、教えて下さい〜(>_<))
とりあえず、Raspberry Pi上でOpenGL ES2が動き、上のサンプルのようなCubeをクルクル回す事ができるのがわかりました。次章でこのサンプルを詳し〜く精査していく事にしましょう。