objファイル形式というものがいろいろなソフトでサポートしているようなので、objファイルを使うことにしました。
OpenGLで遊ぼう6 -まとめ!- @毛の生えたようなものにobjファイルの取り込み方について書かれていたので、参考にして実装してみました。読み込ませる3次元モデルは、Blenderで作りました。Blenderはフリーの3次元モデリングソフトで、いろいろなプラットフォームで使えます。ダウンロードして使ってみましたが、機能が多すぎて使い方がよくわからず。その結果、なんだかよくわからない物体が出来上がりました。
Blenderで作った謎のモデル |
glutのサンプルコード内に含まれている、glm.cというファイルにobjファイルを読み込んで描画する機能が実装されているので、モデルを渡して描画してもらいました。
glmを使ってobjファイルを描画 |
真っ黒になっていますが、謎モデルの形が画面上に出ています。
塗りつぶされているのは光源の設定がよくないからかもしれません。
glm.cとは別になりますが、OBJ2OPENGLというobjファイルをヘッダファイルに変換して、ソースコードに組み込めるようにするスクリプトもあるようです。こちらはOpenGL ES用もあるみたいです。
これまでのまとめ
- OpenCVでカメラのキャリブレーションを行い、カメラの内部定数を求めた
- OpenGLのProjectionMatrix にカメラの内部定数から計算した値を入れ、OpenGL上の座標をミリ単位で指定できるようになった( 参考:POSIT tutorial@OpenCVWiki)
- Blenderで作成した謎モデルをobjファイルにエクスポートして、GLUTに入っているglm.cを使ってOpenGLで描画した
参考資料
詳解OpenCV カメラキャリブレーションの章
コンピュータビジョン ピンホールカメラの章。高いけど詳しい本です。
OpenGLのProjection Matrix関係
POSIT tutorial@OpenCVWiki Projection Matrixを生成して、glLoadMatrixで読み込む方法。なぜこの数式になったのかの検証はまだしていません。
From Homography to OpenGL Modelview Matrix glFrustrumを使う方法。まだ試していません
POSIT tutorial@OpenCVWiki Projection Matrixを生成して、glLoadMatrixで読み込む方法。なぜこの数式になったのかの検証はまだしていません。
From Homography to OpenGL Modelview Matrix glFrustrumを使う方法。まだ試していません
今後の課題
- カメラの内部定数からOpenGLのProjection Matrixを求めるところについてもう少し調べる
- ソースコードが継ぎはぎ状態なので関数にまとめる
- Blenderでパイプ椅子ぐらいは作れるようにする
- OpenGLの光源について調べる
別館に、現時点でのソースコードをアップしておきました。ソースコード、今回使用しているチェスボードのPDF、謎の3Dモデル、カメラの内部定数ファイルを含めています。
ビルド環境はUbuntu 11.10 64bit と, Mac OS X 10.5.8です。OpenCVのバージョンは2.2を使用しています。
CGは難しいなぁ。
ではまた。
0 件のコメント:
コメントを投稿