射影行列を動的に変更しない場合、最も簡単な方法は、
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 にあると仮定しています。