1

私は OpenGl と C++ で基本的なゲームを作成しており、プレイヤーが画面の端に到達するとそれ以上移動できないようにしたいと考えています。画面の端がどこにあるのかわかりません。ウィンドウには通常 1 から -1 の間のシステムがあることは知っていますが、私のシステムは 0.63 から -0.63 に近いようです。プレーヤーは、x、y、z の位置を持つ画面上のボックスとして表示されますが、2D 空間でのみ移動します。

奇数値ではなく、-1 から 1 の間になるように境界を変更したいと考えています。

これどうやってするの?

コードはhttp://pastebin.com/jxd5YhHaにアップロードされています。

4

1 に答える 1

0

射影行列を動的に変更しない場合、最も簡単な方法は、

glScalef(.63f,.63f,1);

あなたの射影行列に。

これらの値に基づいて移動を制限できます。

いつでもワールド空間座標を計算するには、gluUnProject を利用する必要があります。「x」と「y」がそれぞれウィンドウの幅と高さ (gluPerspective に渡す値) であると仮定すると、次のようにワールド空間座標を見つけることができます。

double world_llx,world_lly,world_llz;
//world coordinates of lower left corner of window
gluUnProject(0, 0, 0, view_mat, proj_mat, viewport,&world_llx,&world_lly,&world_llz);
//world coordinate of upper right corner of window
double world_urx,world_ury,world_urz;
gluUnProject(x,y,0,view_mat,proj_mat,viewport,&world_urx,&world_ury,&world_urz);

view_mat はビュー マトリックスです。proj_mat は射影行列です。glGetDouble* と GL_MODELVIEW_MATRIX および GL_PROJECTION_MATRIX を使用して、これらの両方を取得できます。

ビューポート パラメーターは、おそらくウィンドウと同じサイズになります。いずれにせよ、これは glViewport で設定したものです。

これは、XZ 平面が z == 0 にあると仮定しています。

于 2013-04-18T21:36:19.400 に答える