ここにはいくつかの混乱があります。
OpenGLは、オブジェクト空間とワールド空間で右利きです。
しかし、ウィンドウスペース(別名スクリーンスペース)では、突然左利きになります。
これはどのように起こりましたか?
右手から左手に移動する方法は、glOrtho
またはglFrustum
射影行列の負のzスケーリングエントリです。zを-1でスケーリングすると(xとyはそのまま)、座標系の利き手を変更する効果があります。
glFrustumの場合、
farとnearは正であると想定され、far > nearです。遠い= 1000と近い= 1と言います。次に、C =-(1001)/(999)=-1.002。
参照してくださいここに詳細と図について。
正投影視点、glOrthoは、このような行列を生成します。
ここで、左、右、下、上は、左垂直、右垂直、下水平、上水平クリッピング平面(または)の座標です。
近くと遠くのプレーンは、しかし、別々に指定されています。近くのパラメータは以下のように定義されます
- 近く:より近い深さのクリッピング平面までの距離。平面が視聴者の後ろにある場合、この距離は負になります。
そしてはるかに:
- zFarより遠い深度クリッピング平面までの距離。平面が視聴者の後ろにある場合、この距離は負になります。
ここに典型的な標準的なビューボリュームがあります
z乗数は(-2 /(far-near))であるため、マイナス記号はzを-1だけ効果的にスケーリングします。これは、表示変換中に「z」が左利きになることを意味します。OpenGLで「右利き」の座標系として機能するだけなので、ほとんどの人には知られていません。
だから、あなたが呼ぶなら
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
次に、NEARPLANEはあなたの10ユニット先にあります。どこにいますか?なぜ、原点で、x軸が右に、y軸が頭の上にあり、鼻が負のz軸を下に向けているのですか(これがデフォルトです。デフォルトでは、カメラは原点にあります。 、は負のz軸を下向きで、上向きベクトルは(0、1、0)です。 ")。したがって、近平面はz = -10にあります。遠方の平面は、z = +10で10ユニット後ろにあります。