1

我正在用 OpenGl 和 C++ 创建一个基本游戏,并且想要制作它,这样当玩家到达屏幕边缘时,他们就不能再移动了。我无法确定屏幕边缘的位置。我知道 Windows 通常有一个介于 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 是您的投影矩阵。您可以使用带有 GL_MODELVIEW_MATRIX 和 GL_PROJECTION_MATRIX 的 glGetDouble* 来获得这两者。

视口参数可能与您的窗口具有相同的尺寸。无论如何,这是您使用 glViewport 设置的。

这假设您的 XZ 平面位于 z == 0。

于 2013-04-18T21:36:19.400 回答