2013-04-18 52 views
1

我在OpenGl和C++中创建了一个基本游戏,并且希望这样做是为了当玩家到达屏幕边缘时,他们不能再进一步移动。我无法确定屏幕边缘的位置。我知道windows通常有一个1到-1的系统,但我的似乎更像是0.63到-0.63。玩家在屏幕上显示为具有x,y和z位置的框,但它只会在2D空间中移动。OpenGl坐标系不是-1到1

我想改变边界,使它们在-1和1之间,而不是奇数值。

我该怎么做?

代码已上传至http://pastebin.com/jxd5YhHa

+0

您的视角平截头体是什么样的? –

+0

我猜想它是45度角的1到1000(gluPerspective(45.0,(float)WIDTH /(float)HEIGHT,1,1000)) – user2296321

+1

[在openGL中设置窗口的大小](http: /stackoverflow.com/questions/16090612/setting-the-size-of-a-window-in-opengl) – datenwolf

回答

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.

+0

这种工作除了0.63是一个猜测无论如何,以确切知道屏幕的界限任何时候? – user2296321

+0

@ user2296321请参阅编辑。这应该非常接近你需要做的事情。 – Aeluned

+0

视口目前未定义我该怎么做? – user2296321