如果您不打算动态更改投影矩阵,最简单的方法是调用
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 是您的投影矩阵。您可以使用带有 GL_MODELVIEW_MATRIX 和 GL_PROJECTION_MATRIX 的 glGetDouble* 来获得这两者。
视口参数可能与您的窗口具有相同的尺寸。无论如何,这是您使用 glViewport 设置的。
这假设您的 XZ 平面位于 z == 0。