2008年8月16日 15:28

OpenGLのカメラ位置行列の計算

このエントリーを含むはてなブックマーク

OpenGLにおいて、視点を設定する為によくgluLookAt()関数が用いられます。ですがモデルビュー行列をアプリケーション内部で持つ為、同様の計算をしてみます。

OpenGLはかなり低レベルな3D描画ライブラリで、各種変換行列を変化させてポリゴンを出力するのが基本です。例えば射影行列(Projection)やモデルビュー行列(Model-View)などです。

ですが、それではあまりに面倒だという事で、GLU内にはヘルパー関数が用意されています。例えばgluPerspective()関数は射影行列を設定する事で透視図法を実現します。

同様にgluLookAt()関数はモデルビュー行列に「カメラ」のような設定をする事が出来ます。具体的には引数に1.視点位置ベクトル、2.対象位置ベクトル、3.「上」を示す方向ベクトルを与える事でモデルビュー行列を設定します。

一般的にはこれらの関数をそのまま用いて問題ないのですが、4x4行列をアプリケーション自身で管理したいときには厄介になります。射影行列やモデルビュー行列はOpenGL内部で管理されるため直接各要素にアクセスする事ができない為です。glGetFloatvでモデルビュー行列の中身を取得する事も出来ますが、どうにも二度手間な気もするので、gluLookAtを自前で計算してみます。

はじめにgluLookAtをglLoadMatrixで置き換えてみる - 三次元日誌を参考に実装したのですが、当環境ではどうやらカメラのX、Y方向の移動が考慮されないようでしたので、独自に改良してみました。

先述ページでは視点位置ベクトルをpos、対象位置ベクトルをtarget、方向ベクトルをdirとして、

x, y, zのベクトル定義

と置き、

変更前の行列

としています。こうすると先述の通りうまくいかなかったため、変更した結果、

変更後の行列

としました。ただし、数学的根拠がある訳ではなく経験的です。GLUの仕様の方も調べましたが、どのような行列にするかという定義が無いようでした。どなたか詳しい方がおりましたらご指摘いただければ幸いです。

カテゴリ

タグ

関連記事

  1. OpenCL 1.0 仕様書が公開
  2. OpenCL(!)はスタンダードとなるか
  3. UNIX(Mac OS X)におけるFlex 3 SDKによるAIRプログラミング 環境設定
  4. OpenALの仕様書を翻訳してみた。
  5. iPhone SDKがβ版でついに登場
  6. Flex、AIRへの導入
  7. "Releases"ライブラリ類を64bits対応へ
  8. iPhone, iPod touch用ソフトウェアSDKを来春公開へ

トラックバック

このブログ記事を参照しているブログ一覧: OpenGLのカメラ位置行列の計算

このブログ記事に対するトラックバックURL: http://www.memorize-being.net/x/mt-engine/mt-tb.cgi/49

コメントする

このブログ記事について

このページは、cottonが2008年8月16日 15:28に書いたブログ記事です。

ひとつ前のブログ記事は「Flex 3 SDKで"pong"もどきを作りつつ、AIRでのゲームについて考えてみた。」です。

次のブログ記事は「I've in BUDOKAN 2009チケットを購入」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.1
Valid XHTML 1.0 Transitional
Valid CSS!
Mozilla Firefox ブラウザ無料ダウンロード