2013-12-09 106 views
0

所以我正在使用2d數組,並且我試圖使用opengl將其顯示在窗口小部件上。它似乎工作正常,但它不能正確填充窗口小部件。不是均勻地填充它,而是移動到右下角,如下圖所示。我怎樣才能讓這個被集中? enter image description here填充整個窗口部件opengl

int x = -0.1; 
int y = -0.1; 
float lengthX = 0.9/ROW; 
float lengthY = 0.9/COLM; 

for (int i = 0; i < ROW; i++) { 
    for (int j = 0; j < COLM; j++) { 
     if (arr[i][j] == 1) { 
      glColor3f(1.0f, 1.0f, 1.0f); 
     } else { 
      glColor3f(0.0f, 0.0f, 0.0f); 
     } 

     glBegin(GL_QUADS); 
      // Q3 Q4 Q1 Q2 
      glVertex2f((-x) + 2 * i * lengthX, (-y) + 2 * j * lengthY); 
      glVertex2f(x + (2 * i + 1) * lengthX, (-y) + (2 * j + 1) * lengthX); 
      glVertex2f(x + (2 * i + 1) * lengthX, y + (2 * j + 1) * lengthY); 
      glVertex2f((-x) + 2 * i * lengthX, y + 2 * j * lengthY); 
     glEnd(); 
    } 
} 
+0

你的矩陣設置爲?另外,什麼是變量'ROW'和'COLM'設置爲? – 2013-12-09 03:13:43

+0

@Alex Larsen它們都設置爲100,'const int ROW = 100,COLM = 100;' –

+0

另外,它是什麼'arr'? – 2013-12-09 03:37:38

回答

1

首先,你的代碼是錯誤的與它的變量;如int x = -0.1

現在,爲了解決這個問題只需添加這對你的代碼的開頭:

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

的問題是,您使用的是默認矩陣設定。基本上,它的範圍從-1, -11, 1,而不是0, 0,到1, 1。我不能完全讀取你的代碼,但是如果你可以編輯glOrtho函數的前4個參數(最後兩個參數不應該有效)來改變你正在繪製的可見範圍。

只是要解釋一點,第一個參數設置左側,第二個右側,第三個底部和第四個頂部。所以glOrtho(0, 600, 800, 0)意味着將頂點設置爲0, 0意味着它顯示在左上角,而頂點設置爲800, 600將顯示在右下角。

您的設置僅顯示了它應該顯示的部分內容,因爲它的中心是屏幕的一角。

+0

有沒有一種方法來保持長寬比,如果我改變數組的大小?當我改變它超出小部件,我不能看到它像這裏一些http://i.imgur.com/B1sPmjt.png –

+0

我不知道你在說什麼。如果你的意思是調整你看到的大小,你可以使用'glViewport(0,0,width,height)'。如果你的意思是確保它沒有拉伸,那就需要調整視口(正如我剛剛提到的那樣),用一些數學和繪圖工具來調整它,或者使用頂點着色器,這需要更多的工作,並且需要更多數學,但可以做更好的事情。 – 2013-12-09 06:12:06

+0

我可以問你一些關於我在這裏工作的問題嗎? http://chat.stackoverflow.com/rooms/42765/openglhelps –