プロが教えるわが家の防犯対策術!

OpenGLにおいて、ユーザーが特に指定をしなければ、画面の右向きが+x方向、上向きが+y方向、奥向きが-z方向となり、それぞれ-1.0~1.0までの範囲が「見える」範囲になる、というのがデフォルトらしいですが、その「理由」を教えていただけませんでしょうか?

参考になるサイトのURL等があれば、あわせて教えていただけると助かります。

A 回答 (2件)

1、-1.0から1.0にしておけば、さまざまなウィンドウサイズに対応できるから。


ウィンドウサイズはglViewportで指定します。

2、デフォルトが単位行列だから。
3次元形状がどのように見えるかは、
1,カメラの位置と方向
2,カメラの見える範囲と投影方法(平行投影、透視投影)
によって決まります。

1も2もOpenGLでは4x4の行列で表され、描画時にこれらの行列を掛けて全体的な変換行列を求め、それとワールド座標系の3次元座標を掛けることにより、カメラ位置から見た形状が求まるわけです。
1の行列はビュー変換行列、gluLookAtで指定します。
2の行列はプロジェクション変換行列、glOrtho、gluPerspective等で指定します。
何も指定しないとデフォルトの単位行列になり、
ビュー変換行列が単位行列である意味は、
カメラ位置(0,0,0)、
ワールドベクトル(1,0,0) -> カメラ右向きベクトル(1,0,0)
ワールドベクトル(0,1,0) -> カメラ上向きベクトル(0,1,0)
ワールドベクトル(0,0,1) -> カメラ手前向きベクトル(0,0,1)
の変換を行う行列ということであり、

プロジェクション変換行列が単位行列である意味は、
カメラ位置から上下左右前後に-1.0から1.0を-1.0から1.0に変換する行列ということです。
したがってここで変換される-1.0から1.0がGLの見える範囲でないと、さらに変換が必要になりまずいわけです。


実際に手計算で3次元座標がどのように見えるか計算してみると理解しやすいです。

参考URL:http://www.users.yun.co.jp/~studiowing/etc/index …
    • good
    • 0
この回答へのお礼

非常にわかりやすい解説ありがとうございました。

お礼日時:2004/12/13 12:14

推測ですので違うかも知れません。



座標系はいろいろありますが、特に指定がなければ数学などで一般的に使う3次元のXYZの座標系を使うのが普通だろう考えます。
で画面ですが、やはり横をX軸、縦をY軸、画面に垂直な方向をZ軸と考えるのがもっとも自然でしょう。
Z=0と考えた時に画面という平面になりますし。
で、さっきの一般的な座標系を回転させて画面のXYZに合わせると、右がX+,上がY+,手前がZ+となります。

範囲はどんな値にしてもかまいませんが、実数であつかなら全体を1と考えるのがもっとも自然でしょう。
特定のコンピュータの画面を考えるとか、整数だけで考えるなら他の値も考えられるでしょうが、
OpenGLは特定の用途に限定したものでなく、一般的な3DCGを扱うことを考えていますから、例えば640とか1024という数に意味を持たせるのは不自然です。

逆の発想なのが例えばWindowsのビットマップで、点を表示装置の都合にすぎない画面の一点とするとか、
ハードウェアの描画順(走査線の移動順)に合わせて左上を原点とし右方向をX+,下をY+とし、二次元を基本とするのでZは存在しないとか。
    • good
    • 0
この回答へのお礼

レスが遅れてすみません。
ご回答ありがとうございました。

お礼日時:2004/12/13 12:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!