日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenGL教程——GLUT初始化

發布時間:2025/6/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenGL教程——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();
}

總結

以上是生活随笔為你收集整理的OpenGL教程——GLUT初始化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。