2010-07-30 111 views
2

我開始處理OpenGL。我的應用程序是使用SWT作爲窗口系統以Java編寫的。Opengl在窗口中央繪製

使用http://lwjgl.org/和SWT,我可以在我的SWT畫布中使用OpenGL。我寫了下面簡單的OpenGL代碼在我的畫布塗料聽衆:

// clear to background color 
GL11.glClearColor(.3f, .5f, .8f, 1.0f); 
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); 

// draw rectangle 
GL11.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 
GL11.glMatrixMode(GL11.GL_PROJECTION); 
GL11.glLoadIdentity(); 
GL11.glBegin(GL11.GL_POLYGON); 
GL11.glVertex3f(0.1f, 0.1f, 0.0f); 
GL11.glVertex3f(0.1f, 0.9f, 0.0f); 
GL11.glVertex3f(0.9f, 0.9f, 0.0f); 
GL11.glVertex3f(0.9f, 0.1f, 0.0f); 
GL11.glEnd(); 
GL11.glFlush(); 

我想知道,爲了增加我的畫布大小調整聽者總是有我在窗口的中心矩形。我應該怎麼做?

回答

4

每次畫布大小發生變化時,都需要通過調用glViewport()來手動設置視口大小。之後,您的屏幕將具有由glOrtho()指定的尺寸。

此外,你的矩陣是一團糟。投影矩陣僅用於投影,模型視圖用於其他轉換(旋轉,縮放,移動等)。

// Viewport (needs to be done on canvas resize only) 
GL11.glViewport(0.0, 0.0,     // Set viewport size 
       canvas.getBounds().width, 
       canvas.getBounds().height); 

// Projection (only needs to be set once in most cases) 
GL11.glMatrixMode(GL11.GL_PROJECTION);  // Select projection matrix 
GL11.glLoadIdentity();      // Clear it 
GL11.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); // Set your projection 

// model/view transforms 
GL11.glMatrixMode(GL11.GL_MODELVIEW); // Select modelview matrix 
GL11.glLoadIdentity();     // Clear it 

// Draw (shortcut) 
GL11.glRectf(0.1f, 0.1f, 0.9f, 0.9f);