如果您不打算动态更改投影矩阵,最简单的方法是调用
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。