http://blog.sina.com.cn/s/blog_986c47a70101humi.html
點的大小默認為1個像素,但也可以改變之。改變的命令為glPointSize,其函數原型如下:
void glPointSize(GLfloat size);
size必須大於0.0f,默認值為1.0f,單位為“像素”。
直線可以指定寬度:
void glLineWidth(GLfloat width);
其用法跟glPointSize類似
畫虛線:
首先,使用glEnable(GL_LINE_STIPPLE);來啟動虛線模式(使用glDisable(GL_LINE_STIPPLE)可以關閉之)。
然后,使用glLineStipple來設置虛線的樣式。
void glLineStipple(GLint factor, GLushort pattern);
pattern是由1和0組成的長度為16的序列,從最低位開始看,如果為1,則直線上接下來應該畫的factor個點將被畫為實的;如果為0,則直線上接下來應該畫的factor個點將被畫為虛的。
關於多邊形
(1)多邊形的兩面以及繪制方式。
雖然我們目前還沒有真正的使用三維坐標來畫圖,但是建立一些三維的概念還是必要的。
從三維的角度來看,一個多邊形具有兩個面。每一個面都可以設置不同的繪制方式:填充、只繪制邊緣輪廓線、只繪制頂點,其中“填充”是默認的方式。可以為兩個面分別設置不同的方式。
glPolygonMode(GL_FRONT, GL_FILL); // 設置正面為填充方式
glPolygonMode(GL_BACK, GL_LINE); // 設置反面為邊緣繪制方式
glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); // 設置兩面均為頂點繪制方式
(2)反轉
可以通過glFrontFace函數來交換“正面”和“反面”的概念。
glFrontFace(GL_CCW); // 設置CCW方向為“正面”,CCW即CounterClockWise,逆時針
glFrontFace(GL_CW); // 設置CW方向為“正面”,CW即ClockWise,順時針
下面是一個示例程序,請用它替換第一課中的myDisplay函數,並將glFrontFace(GL_CCW)修改為glFrontFace(GL_CW),並觀察結果的變化。
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPolygonMode(GL_FRONT, GL_FILL); // 設置正面為填充模式
glPolygonMode(GL_BACK, GL_LINE); // 設置反面為線形模式
glFrontFace(GL_CCW); // 設置逆時針方向為正面
glBegin(GL_POLYGON); // 按逆時針繪制一個正方形,在左下方
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, -0.5f);
glVertex2f(0.0f, 0.0f);
glVertex2f(-0.5f, 0.0f);
glEnd();
glBegin(GL_POLYGON); // 按順時針繪制一個正方形,在右上方
glVertex2f(0.0f, 0.0f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, 0.5f);
glVertex2f(0.5f, 0.0f);
glEnd();
glFlush();
}
注意,默認逆時針是正面,而且默認填充,要改變的話,通過
glPolygonMode(GL_FRONT, GL_FILL);
glFrontFace(GL_CCW); // 設置逆時針方向為正面
而且他們的設置,要放在多邊形繪制之前,即glBegin(GL_POLYGON); 前面