主要參考了:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html裡的內容。
1、點座標的指定
下面的代碼在螢幕上畫出一組孤立的點,點之間沒有任何連線。
void display()
{glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POINTS);glVertex2f(-0.5,-0.5); //點P1glVertex2f(-0.5,0.5); //點P2glVertex2f(0.5,0.5); //點P3glVertex2f(0.5,-0.5); //點P4glEnd();glFlush();}
編譯之後運行,如果你的眼神夠好,會發現在視窗中有4個小白點。也就是正方形的4個頂點。1所示。
代碼解釋
名字以glVertex開頭的一系列函數用於指定頂點座標,名字裡的2表示2維即兩個座標(x和y),f表示座標的類型是float。這一系列函數包括:
glVertex2d
glVertex2f
glVertex3f
glVertex3fv
等等。
數字表示參數的個數,字母表示參數的類型,具體含義是
s表示16位整數(OpenGL中將這個類型定義為GLshort),
i表示32位整數(OpenGL中將這個類型定義為GLint和GLsizei),
f表示32位浮點數(OpenGL中將這個類型定義為GLfloat和GLclampf),
d表示64位浮點數(OpenGL中將這個類型定義為GLdouble和GLclampd)。
v表示傳遞的幾個參數將使用指標的方式,見下面的例子。
這些函數除了參數的類型和個數不同以外,功能是相同的。例如,以下五個程式碼片段的功能是等效的:
glVertex2i(1, 3); glVertex2f(1.0f, 3.0f);glVertex3f(1.0f, 3.0f, 0.0f);glVertex4f(1.0f, 3.0f, 0.0f, 1.0f);GLfloat VertexArr3[] = {1.0f, 3.0f, 0.0f};glVertex3fv(VertexArr3);
以後我們將用glVertex*來表示這一系列函數。
注意:OpenGL的很多函數都是採用這樣的形式,一個相同的首碼再加上參數說明標記,這一點會隨著學習的深入而有更多的體會。
對例子中的代碼
glVertex2f(-0.5, 0.5)
;這一句的意思就是給出一個點,其x座標和y座標分別為-0.5和0.5。在本節的例子中,你可以認為座標原點在視窗的中心,x軸向右為正, y軸向上為正。視窗繪圖區的高度度和寬度都是1。
2、線段的繪製
glBegin函數的參數是告訴程式對後面給出的點集進行什麼操作。這個參數的常見取值有:
(1) GL_POINTS:畫出單個的點,點之間沒有任何連線,效果如上面的圖1。
92) GL_LINES:兩個點一組,每組之間一條線段。(對上面的代碼,參數如果是GL_LINES,則畫出兩條線段,分別是P1P2和P3P4。
效果2所示。(紅色文字是我自己加的,以下同)
(3) GL_LINE_STRIP:用給出的點畫出一條連續折線,除最後一個點外。每一個點都是下一段的起點。即畫出三條線段P1P2、P2P3、P3P4,
效果3所示。
(4) GL_LINE_LOOP:用給出的點畫出一個閉合折線。也就是在GL_LINE_STRIP的基礎上再把最後一個點和第一個點連起來。即畫出四條線段P1P2、P2P3、P3P4、P4P1。效果4所示