我在OpenGl和C++中創建了一個基本遊戲,並且希望這樣做是爲了當玩家到達屏幕邊緣時,他們不能再進一步移動。我無法確定屏幕邊緣的位置。我知道windows通常有一個1到-1的系統,但我的似乎更像是0.63到-0.63。玩家在屏幕上顯示爲具有x,y和z位置的框,但它只會在2D空間中移動。OpenGl座標系不是-1到1
我想改變邊界,使它們在-1和1之間,而不是奇數值。
我該怎麼做?
代碼已上傳至http://pastebin.com/jxd5YhHa。
我在OpenGl和C++中創建了一個基本遊戲,並且希望這樣做是爲了當玩家到達屏幕邊緣時,他們不能再進一步移動。我無法確定屏幕邊緣的位置。我知道windows通常有一個1到-1的系統,但我的似乎更像是0.63到-0.63。玩家在屏幕上顯示爲具有x,y和z位置的框,但它只會在2D空間中移動。OpenGl座標系不是-1到1
我想改變邊界,使它們在-1和1之間,而不是奇數值。
我該怎麼做?
代碼已上傳至http://pastebin.com/jxd5YhHa。
如果你不會是動態變化的投影矩陣,最容易做的事情是打電話
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.63是一個猜測無論如何,以確切知道屏幕的界限任何時候? – user2296321
@ user2296321請參閱編輯。這應該非常接近你需要做的事情。 – Aeluned
視口目前未定義我該怎麼做? – user2296321
您的視角平截頭體是什麼樣的? –
我猜想它是45度角的1到1000(gluPerspective(45.0,(float)WIDTH /(float)HEIGHT,1,1000)) – user2296321
[在openGL中設置窗口的大小](http: /stackoverflow.com/questions/16090612/setting-the-size-of-a-window-in-opengl) – datenwolf