opengl學習筆記(五)——繪製複雜圖形

來源:互聯網
上載者:User

從本節開始,將敘述如何設定圖形的外觀屬性如大小和顏色、線型、線寬等。

1、點的大小

glPointSize函數用於設定單個點的大小,函數原型為:

void glPointSize(GLfloat size);

參數size的值必須大於0.0f,預設值為1.0f,單位為“像素”。

注意:對於具體的OpenGL實現,點的大小都有個限度的,如果設定的size超過最大值,則設定可能會有問題。

下面的代碼在螢幕上標出了兩個點,每個點的半徑都是5像素。

void display(void){glClear(GL_COLOR_BUFFER_BIT);glPointSize(5.0f);glBegin(GL_POINTS);glVertex2f(0.0f, 0.0f);glVertex2f(0.5f, 0.5f);glEnd();glFlush();}

運行效果如所示

OpenGL支援兩種顏色模式:,一種是RGBA模式,一種是索引模式。由於索引模式在PC機上已經用不到,所以不講。

2、設定前景色彩。

設定像素的RGBA值的函數名字是glColor* 。

函數原型為:

void glColor3f(GLfloat red, GLfloat green, GLfloat blue);void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);

(還記得嗎?函數名裡的3f 表示有三個浮點參數~請看第二課中關於glVertex*函數的敘述。)

這裡的A是alpha通道的縮寫。alphat通道的作用是設定不透明度,預設值是1。實際上,下面兩句代碼的功能是等效的

glColor3f(1.0,0.0,0.0);glColor4f(1.0,0.0,0.0,1.0);

例如:

glColor3f(1.0f, 0.0f, 0.0f);    //紅色。glColor3f(0.0f, 1.0f, 1.0f);    //淺藍色。glColor3f(0.5f, 0.5f, 0.5f);    //灰色。

下面代碼繪製了一個淺藍色的矩形。

void display(void)
{
     glClear(GL_COLOR_BUFFER_BIT);
     glColor3f(0.0f, 1.0f, 1.0f);   
     glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
     glFlush();
}

運行效果如:

注意:浮點數可以精確到小數點後若干位,這並不表示電腦就可以顯示如此多種顏色。實際上,電腦可以顯示的顏色種數將由硬體決定。如果OpenGL找不到精確的顏色,會進行類似“四捨五入”的處理。

3、設定背景色

opengl提供了一個函數glClearColor來設定螢幕的背景色。這個函數需要和另外一個函數glClear結合起來使用。例子代碼如下:

void display(void){     glClearColor(1.0f, 0.0f, 0.0f, 0.0f);  //設定背景色為紅色     glClear(GL_COLOR_BUFFER_BIT);//清空螢幕,也就是用背景色將整個表單的繪圖區重新畫一遍     glFlush();}

運行效果就是畫出了一個繪圖區為紅色的表單,如所示

4、線段的顏色。

從前面可知,glColor函數設定了下一次繪圖操作時所使用的畫筆顏色,如下面的例子代碼。標出了兩個點,原點A(0,0)的顏色為紅色,而點B(0.5,0.5)的顏色為綠色。

void display(void){glClear(GL_COLOR_BUFFER_BIT);glPointSize(5.0f);glBegin(GL_POINTS);glColor3f(1.0,0.0,0.0); //使用中色彩為紅色glVertex2f(0.0f, 0.0f);  glColor3f(0.0,1.0,0.0); //使用中色彩為綠色glVertex2f(0.5f, 0.5f);glEnd();glFlush();}

運行效果為:

將上面代碼中的繪圖模式從GL_POINTS改為GL_LINES,可以得到一條線段AB。細心的讀者於是要問:線段AB上的每個點的顏色應該是什嗎?都是紅色?都是綠色?

一半紅色?一半綠色?關於這個問題,我麼先看下運行結果。

可以看到,線段AB上各點的顏色是"漸層"的,也就是逐漸從紅色變為綠色。

opengl中提供了一個函數glShadeModel來決定如果處理這種不同顏色的情況。

這個函數的參數值只有兩個:如下所示

glShadeModel(GL_SMOOTH);    // 平滑方式,這也是opengl的預設處理方式,實現色彩坡形的效果glShadeModel(GL_FLAT);      // 單色方式,線段的顏色以某一個頂點的顏色為準,由具體實現決定。為了避免不確定性,應盡量在多邊形中使用同一種顏色

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.