簡體   English   中英

OpenGl坐標系不在-1到1

[英]OpenGl coordinate system is not at -1 to 1

我正在用OpenGl和C ++創建一個基本的游戲,並且想要制作一個這樣的游戲,以便當播放器到達屏幕邊緣時他們無法進一步移動。 我無法確定屏幕邊緣在哪里。 我知道Windows通常具有1到-1之間的系統,但我的似乎更像是0.63至-0.63。 播放器在屏幕上顯示為一個具有x,y和z位置的框,但只能在2D空間中移動。

我想更改范圍,使其在-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是您的投影矩陣。 您可以使用帶有GL_MODELVIEW_MATRIX和GL_PROJECTION_MATRIX的glGetDouble *來獲得這兩者。

viewport參數可能與窗口具有相同的尺寸。 無論如何,這就是您使用glViewport設置的內容。

假設您的XZ平面位於z == 0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM