2016-04-13 11 views
1

openglのカメラの座標は何ですか?私は単にウィンドウで球を描く だから、コードは次のようである:ケース1,2,3,4でopenglのカメラの座標は何ですか

glutSolidSphere (1.0, 20, 16); //draw a sphere, its radius is 1 

//I use glOrtho to set the x,y coordinate 

//1 
glOrtho(-1,1,-1,1,-0.99,-1.0); 

//2 
glOrtho(-1,1,-1,1,-1.0,-0.99); 
//3 
glOrtho(-1,1,-1,1,1.0,0.99); 

//5 
glOrtho(-1,1,-1,1,1.0,1.0); 
//6 
glOrtho(-1,1,-1,1,10,10); 
//7 
glOrtho(-1,1,-1,1,0.0,0.0); 

//8 
glOrtho(-1,1,-1,1,-0.5,0.5); 

//9 
//glOrtho(-1,1,-1,1,0.0,0.1); 

、絵はこのようなものです:ケース5内 a small circle

、 6,7の球は、ウィンドウの同じサイズの とちょうど同じです。 like a torus,strange

glOrthoの説明によれば:

void glOrtho( GLdouble left, 
    GLdouble right, 
    GLdouble bottom, 
    GLdouble top, 
    GLdouble nearVal, 
    GLdouble farVal); 

のカメラの座標は、OpenGLで固定されていると仮定するケース8に

、ピクチャは次のようです。ケース1からの 、カメラが(0,0,0)にあるようです。

1)しかし、その場合、ケース2,3,4はケース1とどのように同じことができますか?

2)どのようにケース5,6,7が出てくるのですか?

3)どのようにケース8が出てくるのですか?

+0

「カメラ座標」は、ModelView Matrixによって異なります。 glLookAtを使用して、「どこを見るか」を選択できます。射影行列は、カメラの配置に影響するのではなく、物の表示方法にのみ影響します。 –

答えて

2

あなたはいくつか混乱しているようです。

は概念的には、デフォルトglOrthoglFrustum()/gluPerspecitve()機能は、カメラがアイスペース原点にあることを前提とし、負z方向を見ています。 ModelView行列をidendity(デフォルト)のままにしておくと、オブジェクト空間が視空間と同じになり、視空間に直接描画されることを意味します。

OpenGLは3次元表示ボリュームを定義します。これは、ビューポート/ウィンドウのサイズによって制限される2D矩形だけでなく、アロエ近辺および遠いクリッピング面があることを意味します。その視体積は、「正規化されたデバイス座標」の軸に位置合わせされたキューブ-1 <= x,y,z <= 1として記述される。

投影行列の目的は、表示ボリュームを から正規化された立方体に変換することです。正射影では、パースペクティブな効果はありません。遠くにあるオブジェクトは小さく見えません。したがって、オルト行列を視点空間の軸に沿った立方体を定義するものと解釈することができます。これは、画面上で表示される空間の部分を定義します。その投影法を設定して、実際には「カメラ」の背後にあるものを見ることができます(nearまたはfarの新鮮な値を使用して)。

あなたのケース1-4はすべて、小さなセクションz in [0.99, 1]またはz in [-1, -0.99]だけを切り取ったため、同じように表示されます。球との交差点はディスクとして表示されます。範囲を反転するかどうかは関係ありません。前後のものを反転するだけなので照明なしでは、基本的にシルエットのみが表示されるため、違いを見ることはできません。

ケース5,6,7はただが無効であり、パラメータnearfarは同一であってはなりません。そのコードはGLエラーを生成し、オルソ・マトリックスを全く作成しません。つまり、投影行列は同一性のままです - そして、あなたは[-1,1]^3の見た目のボリュームをうまく使います。原点を中心とする半径1の球を描画するので、正確に収まります。

ケース8は、スピードの単なるカットであり、インターセッションは-0.5 <= z <= 0.5以内です。

+0

1)ケース3の場合、遠方の平面は遠方の平面より遠く離れていますか? 2)ケース8の場合、目が(0,0,0)にある場合、どのように-0.5と0.5の間の何かを見ることができますか? –

+0

遠方の平面の後ろに近い平面を設定すると、前後のものが反転します。そして私が言ったように、あなたは "カメラ"の後ろのパーツ​​を含むように視体積を指定することができます。オルトプロジェクションでは、カメラが完全に誤解を招くようなものであるという解釈もあります。 – derhass

+0

申し訳ありませんが、私はまだ少し混乱しています。ケース9では、near planeを0に設定すると、球の半分が切り取られます。正面から見た場合、何も見えません。しかし、実際にはそうではありません。どこが間違っていますか? –

関連する問題