OpenGL入門(二):第一個OpenGL程式
在上一篇中的環境配置沒有問題,估計程式出現了問題。
OpenGL實用庫函式:43個,以glu作為字首;
OpenGL輔助庫函式:31個,以aux作為字首;
Windows專用庫函式(WGL):6個,以wgl作為字首;
win32API函式(WGL):5個,無字首。
首先建立工程,步驟如下:
(1)建立Win32 Console Application
(2)在附加依賴庫上加入opengl32.lib;glut32.lib;glu32.lib
程式碼如下:
#include <gl/glut.h>
void renderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除緩衝,GL_COLOR_BUFFER_BIT :顏色緩衝標誌位
glLoadIdentity(); //重置當前矩陣為4*4的單位矩陣
//glRotatef(-135,0.5,0.0,0.0); //旋轉
//glTranslatef(0.5,0.5,0.0); //移動原點
//glScalef(0.5,0.5,1); //縮小
glBegin(GL_TRIANGLES);
glVertex3f(-0.5 ,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.0,0.0);
glEnd();
glutSwapBuffers(); //交換兩個緩衝區指標
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);//初始化glut庫
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);//設定初始顯示模式
glutInitWindowPosition(100,100);
glutInitWindowSize(600,600);
glutCreateWindow("*************");
glutDisplayFunc(renderScene);
glutMainLoop();//enters the GLUT event processing loop.
return 0;
}
說明:
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
函式功能:設定初始顯示模式;
值 | 對應巨集定義 | 意義 |
---|---|---|
GLUT_RGB | 0x0000 | 指定RGB顏色模式的視窗 |
GLUT_RGBA | 0x0000 | 指定RGBA 顏色模式的視窗 |
GLUT_INDEX | 0x0001 | 指定顏色索引模式的視窗 |
GLUT_SINGLE | 0x0000 | 指定單快取視窗 |
GLUT_DOUBLE | v0x0002 | 指定雙快取視窗 |
GLUT_ACCUM | 0x0004 | 視窗使用累加快取 |
GLUT_ALPHA | 0x0008 | 視窗的顏色分量包含 alpha 值 |
GLUT_DEPTH | 0x0010 | 視窗使用深度快取 |
GLUT_STENCIL | 0x0020 | 視窗使用模板快取 |
GLUT_MULTISAMPLE | 0x0080 | 指定支援多樣本功能的視窗 |
GLUT_STEREO | 0x0100 | 指定立體視窗 |
GLUT_LUMINANCE | 0x0200 | 視窗使用亮度顏色模型 |
glutDisplayFunc(renderScene);
glutDisplayFunc(void(*func)(void));
函式功能:註冊當前視窗的顯示回撥函式,執行繪製操作。
引數:
func:形為void func()的函式,完成具體的繪製操作。
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
函式功能:表明需要清除的緩衝標誌位
GL_COLOR_BUFFER_BIT :當前可寫的顏色緩衝
GL_DEPTH_BUFFER_BIT :深度緩衝
GL_ACCUM_BUFFER_BIT:累積緩衝
GL_STENCIL_BUFFER_BIT:模板緩衝
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
第一條語句表示清除顏色設為黑色,第二條語句表示實際完成了把整個視窗清除為黑色的任務,glClear()的唯一引數表示需要被清除的緩衝區。
畫素檢驗、裁剪檢驗、抖動和快取的寫遮蔽都會影響glClear的操作,其中,裁剪範圍限制了清除的區域,而glClear命令還會忽略alpha函式、融合函式、邏輯操作、模板、紋理對映和z快取;
glBegin(GL_TRIANGLES);
函式功能:繪製圖像
GL_POINTS:把每一個頂點作為一個進行處理,頂點n即定義了點n,共繪製N個點。
GL_LINES:把每一個頂點作為一個獨立的線段,頂點2n-1和2n之間共定義了點n,共繪製了N/2條線段。
GL_LINE_STRIP:繪製從第一個頂點到最後一個頂點一次相連的一組線段,第n和n+1個頂點定義了線段n,總共繪製n-1條線段。
GL_LINE_LOOP:繪製從第一個頂點到最後一個頂點依次相連的一組線段,然後最後一個頂點和第一個頂點相連,第n和n+1個頂點定義了線段n,總共繪製n條線段。
GL_TRIANGLES:把每個頂點作為一個獨立的三角形,頂點3n-2、3n-1和3n定義了第n個三角形,總共繪製N/3個三角形。
GL_TRIANGLES_STRIP:繪製一組相連的三角形,對於奇數n,頂點n、n+1和n+2定義了第n個三角形;對於偶數n,頂點n+1、n和n+2定義了第n個三角形,總共繪製N-2個三角形。
GL_TRIANGLE_FAN:繪製一組相連的三角形,三角形是由第一個頂點及其後給定的頂點確定,頂點1、n+1和n+2定義了第n個三角形,總共繪製N-2個三角形。
GL_QUADS:繪製由四個頂點組成的一組單獨的四邊形。頂點4n-3、4n-2、4n-1和4n定義了第n個四邊形。總共繪製N/4個四邊形。
GL_QUAD_STRIP:繪製一組相連的四邊形。每個四邊形是由一對頂點及其後給定的一對頂點共同確定的。頂點2n-1、2n、2n+2和2n+1定義了第n個四邊形,總共繪製N/2-1個四邊形。
GL_POLYGON:繪製一個凸多邊形。頂點1到n定義了這個多邊形。
glBegin()和glEnd()之間可呼叫的函式
glVertex*() 設定頂點座標
glColor*() 設定當前顏色
glIndex*() 設定當前顏色表
glNormal*() 設定法向座標
glEvalCoord*() 產生座標
glCallList(),glCallLists() 執行顯示列表
glTexCoord*() 設定紋理座標
glEdgeFlag*() 控制邊界繪製
glMaterial*() 設定材質
OpenGL空間方位為:螢幕水平方向向右為X軸,螢幕垂直方向向上為Y軸,螢幕垂直方向向外為Z軸。
glTranslatef();glScalef();glRotatef()等介面的作用是對當前模型空間進行幾何轉換,要在呼叫glBegin()和glEnd()介面之前進行處理。
glRotatef(angle,x,y,z);
函式功能:將圖形以a(x,y,z)向量為旋轉軸旋轉angle角度,旋轉遵循右手規則。
glTranslatef(x,y,z);
函式功能:移動圖形的原點。
glScalef(x,y,z);
函式功能:模型縮放。
glutSwapBuffers();
函式功能:交換兩個緩衝區指標。
glutMainLoop();
函式功能:進入GLUT事件處理迴圈,讓所有的與“事件”有關的函式呼叫無限迴圈。