2015-12-03 39 views
0

如果我想在OpenGL畫一個平面,我會做類似下面:爲OpenGL繪圖形狀使用值而不是-1 ... 1?

glBegin(GL_POLYGON); 
glColor3f(1.0, 1.0, 1.0); 
glVertex3f(0.5, -0.5, 0.5); 
glVertex3f(0.5, 0.5, 0.5); 
glVertex3f(-0.5, 0.5, 0.5); 
glVertex3f(-0.5, -0.5, 0.5); 
glEnd(); 

這繪製一條(在兩個軸上-0.5到0.5)覆蓋在畫布上的50%的白色平面。然而,我想用數字代替。我不想使用-1到1,而是使用0到n之類的值,其中n是我畫布的尺寸。對於上面的例子,1000像素畫布上的兩個軸上的像250到750之類的東西,而不是-0.5到0.5。

回答

3

這就是變換矩陣的用途。在你的情況下,你可以根據需要設置一個正投影矩陣。在您的例子情況下

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, 1000, 0, 1000, -1, 1); 

將設立一個觀察空間,使邊界處於0,0左下角和1000,1000的右上方。

請注意,此代碼(以及您提供的代碼)使用舊的不推薦使用的固定功能管道。您應該放棄基於着色器的方法。

+0

+1用於解釋它,-1用於將着色器推薦作爲答案的一部分(而不是評論)。 – immibis

+0

乾杯。我想'glOrtho'也可以把'( - 500,500,-500,500,...)'作爲參數嗎? – gator

+0

glOrtho將浮點值作爲參數。你可以傳遞任何適合浮動的東西。 OpenGL不會「思考」像素。所有事情都以任意單位進行,只有在最後一步數字才轉換爲像素空間。 – datenwolf

相關問題