2012-04-13 10 views
1

私はJavaでLWJGLライブラリとOpenGLを使用しています。私が理解しているように、glFrustumを使って上、下、左、右、近、遠の座標を設定し、glViewportを使ってこれらの座標を画面に関連付けることができます。これは正しいですか? 私が読んだことは何も言及していないので、私はこれを仮定しています。これは、正射影モードを使用していたときの動作です。私の質問に拡大すること 、私は(C構文で)このようOpenGLでCoordinatesシステムを設定する

それは-100 ----- 0 ----- 100の座標系を持つことは可能である方法
glFrustum(-100, 100, -100, 100, -100, 100); 
glViewport(0, 0, 800, 600); // the screen size is 800 by 600 

. . . 

glBegin(GL_QUADS); //draw a rectangle 
glVertex2f(-0.25f, -0.25f); 
glVertex2f(0.25f, -0.25f); 
glVertex2f(0.25f, 0.25f); 
glVertex2f(-0.25f, 0.25f); 
glEnd(); 

を自分のアプリケーションを設定しますx軸とy軸で、私が供給した座標に10を掛けたような大きさの矩形が得られますか?私はそれを理解したよう

答えて

3

、あなたは上、下、右、近くに、左と遠座標

ないかなり

を設定するためにglFrustumを使用することができます。 glFrustumは、切頭先端部が錐台であるピラミッドの形状を有するアフィン遠近法投影行列を作成する。そのピラミッドを先端まで広げようとすると、先端は座標 (0,0,0)にあり、nearパラメータはピラミッドを「切断」する位置としてZ面の先端までのXY平面の距離を定義します。遠方の平面は、ピラミッドベースまでの距離を示します。左、右、上、下のパラメータは、ピラミッドの辺が近平面と交差する場合に定義されます。つまり、ピラミッドは対称である必要はありません。それは同様にシフトすることができます。

そしてglViewportを使用してそれらの座標を画面に関連付けるのは正しいですか?

OpenGLは状態マシンです。これらの状態を設定する順序は関係ありません。あなたはいつでも、どのように各状態を変更することができます。以前の状態が新しい状態を設定するデータ/パラメータに寄与する場合、順序は重要である。行列演算は、前の状態で動作するため、一例です。しかし、glViewportはこれとは独立しています。

座標系が-100 ----- 0 ----- 100のx軸とy軸の場合、どのようにしてサイズが矩形になりますか私が供給した座標に10を掛けましたか?

有効な錐台を構築していないためです。錐台投影の近平面と遠平面は、反対の符号を持つことはできません。通常、あなたはそれらが両方とも陽性であることを望みます。また、近平面距離はゼロでない必要があります。

あなたの「錐台」を定義する方法は、砂時計のような形です。また、あなたの頂点はZ = 0にあるので、それらはその錐台の特異点にあり、そこに何かが起こるかもしれません。

私はあなたが実際にオルソ投影を望んだと思います。

+0

Hmm; ['glFrustum'](http://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml)は何も変更せず、エラーを生成すべきです。クワッドはxとyの両方の画面のちょうど4分の1​​を含んでいます。 –

+0

あなたの答えは非常に便利で、私の理解に追加されましたが、頂点の座標をどのように向けるのですか?例えば、どのように座標5,5,5がどこにあるのか分かりますか? – lilroo

+1

@lilroo:それはあなたのモデルビューと投影行列とビューポートによって異なります。詳しくはこちらをご覧ください:http://www.opengl.org/wiki/Viewing_and_Transformations – datenwolf

関連する問題