glut教程--基本的啓動建立窗口的簡單渲染圖形例子

GLUT教程


在這個部分我們將在我們的程序裏建立一個main函數,這個main函數將完成必須的初始化和開啓事件處理循環。所有的GLUT函數都有glut前綴並且那些完成一些初始化的函數有glutInit前綴。你首先要做的是調用函數glutInit()。 

void glutInit(int*argc,char**argv); 
參數: 

Argc:一個指針,指向從main()函數傳遞過來的沒更改的argc變量。 

Argv:一個指針,指向從main()函數傳遞過來的沒更改的argv變量。 

在初始化GLUT後,我們開始定義我們的窗口。首先確定窗口位置(它默認的是屏幕左上角),我們使用函數glutInitWindowPosition()。 


void glutInitWindowPositon(int x,int y); 
參數: 

X: 距離屏幕左邊的像素數。-1是默認值,意思就是由窗口管理程序決定窗口出現在哪裏。如果不使用默認值,那你就自己設置一個值。 

Y:距離屏幕上邊的像素數。和X一樣。 

注意,參數僅僅是對窗口管理程序的一個建議。儘管你精心的設置了窗口位置,window返回的可能是不同的位置。如果你設置了,一般會得到你想要的結果。接下來我們設置窗口大小,使用函數glutInitWindowSize()。 


void glutInitWindowSize(int width,int height); 
參數: 

Width:窗口的寬度。 

Height:窗口的高度。 

同樣width,height也只是一個參考數字。避免使用負數。 

接下來。你應該使用函數glutInitDisplayMode()定義顯示方式。 

void glutInitDisplayMode(unsighed int mode) 
參數: 

Mode――可以指定下列顯示模式 

Mode參數是一個GLUT庫裏預定義的可能的布爾組合。你使用mode去指定顏色模式,數量和緩衝區類型。 

指定顏色模式的預定義常量有: 

1:GLUT_RGBA或者GLUT_RGB。指定一個RGBA窗口,這是一個默認的顏色模式。 

2:GLUT_INDEX。指定顏色索引模式。 

這個顯示模式還允許你選擇單緩衝區或雙緩衝區窗口。 

1:GLUT_SINGLE.單緩衝區窗口。 

2:GLUT_BUFFER.雙緩衝區窗口,這是產生流暢動畫必須選的。 

還可以指定更多,如果你想指定一組特殊的緩衝的話,用下面的變量: 

1:GLUT_ACCUM.累積緩衝區。 

2:GLUT_STENCIL.模板緩衝區。 

3:GLUT_DEPTH.深度緩衝區。 

假定你想要一個有單緩衝區,深度緩衝區的RGB窗口,你用“或“(|)操作符來建立你想要的顯示模式。 

……………. 

glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE|GLUT|DEPTH); 


……………. 

經過上面的這些步驟後,就可以調用函數glutCreateWindow()來創建窗口了。 

Int glutCreateWindow(char* title); 
參數: 

Title:設置窗口的標題。 

glutCreateWindow()的返回值是一個窗口標識符。後面你可以在GLUT裏使用這個標識符,不過這個超出了本小節的範圍。 

現在就有一些代碼來完成所有的初始化操作。 

#include<gl/glut.h> 
void main(int argc,char**argv) 
{
glutInit(&argc,argv); 
glutInitDisplayMode(GLUT_DEPTH|GLUT_SINGLE|GLUT_RGBA); 
glutInitWindowPosition(100,100); 
glutInitWindowSize(320,320); 
glutCreateWindow(“GLUT Tutorial”); 
} 
如果你運行上述代碼,你將會得到一個空的黑的控制檯窗口,而沒有OpenGL窗口。並且控制檯窗口將很快消失。 

在我們渲染一些東西前,還有兩件事需要處理。第一告訴GLUT哪個函數負責渲染。我們創建一個簡單的渲染的函數。下面的這個函數將會清除顏色緩衝區並畫一個三角形。 

... 
void renderScene(void)
 { 
   glClear(GL_COLOR_BUFFER_BIT); 
   glBegin(GL_TRIANGLES); 
   glVertex3f(-0.5,-0.5,0.0); 
   glVertex3f(0.5,0.0,0.0); 
   glVertex3f(0.0,0.5,0.0); 
   glEnd(); 
   glFlush(); 
} 

上面的函數的名字你可以自己取一個。現在你必須告訴GLUT使用我們上面的函數來進行渲染。這個叫寄存回調。。讓我們告訴GLUT這個函數renderScene應該被使用。當需要重畫的時候GLUT有一個只傳遞一個函數名稱參數的函數(以函數名爲形參的函數)就會被調用。 
void glutDisplayFunc(void (*func)(void)); 
參數: 

func: 當窗口需要被重繪是調用的函數的名稱。注意使用NULL作爲實參是錯誤的。 

最後一件事是告訴GLUT我們準備進入應用程序事件處理循環。GLUT提供了一個函數讓程序進入一個永不結束的循環。一直等待處理下一個事件。函數是glutMainLoop()。 
void glutMainLoop(void) 

到目前爲止所有的代碼都列在下面。如果你運行代碼,將會得到一個控制檯窗口,和一個畫着一個白色三角形的OpenGL窗口,出現在你設置的位置,並有着你設置的尺寸。 

#include <GL/glut.h> 

void renderScene(void) 
{ 
	glClear(GL_COLOR_BUFFER_BIT); 
	glBegin(GL_TRIANGLES); 
	glVertex3f(-0.5,-0.5,0.0); 
	glVertex3f(0.5,0.0,0.0); 
	glVertex3f(0.0,0.5,0.0); 
	glEnd(); 
	glFlush(); 
} 

void main(int argc, char **argv) 
{ 
	glutInit(&argc, argv); 
	glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); 
	glutInitWindowPosition(100,100); 
	glutInitWindowSize(320,320); 
	glutCreateWindow("3D Tech- GLUT Tutorial"); 
	glutDisplayFunc(renderScene); 
	glutMainLoop(); 
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章