2013-04-18 50 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