2010-12-11 69 views
1

我最近學習了OpenGL,看起來非常直觀,但我堅持。如何更改設置,以便OpenGL使用基於像素的座標系而不是現在使用的座標系。比如這段代碼繪製一個約10×20像素的矩形:設置座標系爲OpenGL中的像素爲可可

glBegin(GL_QUADS); { 
    glVertex3f(player.x, player.y, 0); 
    glVertex3f(player.x+0.05, player.y, 0); 
    glVertex3f(player.x+0.05, player.y+0.1, 0); 
    glVertex3f(player.x, player.y+0.1, 0); 
} 

我怎樣才能讓這個驗證碼:

glBegin(GL_QUADS); { 
    glVertex3f(player.x, player.y, 0); 
    glVertex3f(player.x+10.0, player.y, 0); 
    glVertex3f(player.x+10.0, player.y+20.0, 0); 
    glVertex3f(player.x, player.y+20.0, 0); 
} 

基本上會產生同樣的事情?謝謝。

編輯:我看到有人建議在某處使用glOrtho(),但他們沒有給出任何有關如何做到這一點的信息。這會起作用嗎?如果是這樣,我該怎麼做?

回答

2

對不起,如果我聽起來簡短;事實證明,iPad上的Safari會丟棄你的輸入,因爲它可能會導致內存警告導致重新加載。

假設:你已經標記了iPhone的問題,所以你正在談論可可觸摸(原點在左上方,y軸爲正)。同樣,你可能需要點數,而不是像素 - 因此無論是否在視網膜屏幕上,它們都是320x480。

glOrtho正是你想要的 - 查看手冊頁http://www.khronos.org/opengles/documentation/opengles1_0/html/glOrtho.html。所以,你可能想要這樣做到你的投影堆棧:

glOrthof(0,320,480,0,1,1000);

,然後在模型視圖做一次:

的glTranslatef(0,0,-500)

,並提交所有未來的幾何形狀沒有z分量。

這樣做是建立一個沒有視角的視口(即z位置不影響對象大小),屏幕的左邊緣在x = 0,右邊在x = 320,頂部在y = 0,y = 480的底部。它任意地將近夾平面放置在距離1處,遠處放在1000處,因爲它們必須位於某處。但是之後它會轉換爲二者之間的中間(好吧,不完全一樣),所以如果您不再提交任何z座標,那麼您的所有幾何圖形都將可見,並且如果您在y或x周圍有旋轉的餘地要他們。

雖然被警告:glVertex調用在iOS上不可用,因爲它們不是OpenGL ES的一部分。它們在現代OpenGL中也被棄用。簡短的版本是,他們真的效率低下,很難讓司機很快處理。 glVertexPointer是要使用的東西,傳遞一個C數組。

+0

完美工作。謝謝! – Jumhyn 2010-12-11 04:38:19