天天看點

OPenGL筆記--給多邊形上色

文章目錄

  • ​​一、前置知識​​
  • ​​二、運作效果​​
  • ​​三、具體代碼​​

一、前置知識

OPenGL中上色分為:單調着色、平滑着色

  • 單調着色:給四邊形圖上固定的一種顔色;
  • 平滑着色:給三角形的三個頂點的不同顔色混合在一起,建立漂亮的色彩混合;

使用​

​glColor3f(r, g, b)​

​來設定目前畫筆顔色

二、運作效果

OPenGL筆記--給多邊形上色

三、具體代碼

完整代碼可參考:OPenGL筆記–建立一個OPenGL視窗
void GL_Test::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除螢幕和深度緩存

    glLoadIdentity();   //重置目前的模型觀察矩陣

    glTranslatef(-1.5, 0.0, -6.0);

    //開始繪制三角形
    //-----------------------------------------
    glBegin(GL_TRIANGLES);

    glColor3f(1.0, 0.0, 0.0);        //設定畫筆顔色
    glVertex3f(0.0, 1.0, 0.0);      //上頂點

    glColor3f(0.0, 1.0, 0.0);        //設定畫筆顔色
    glVertex3f(-1.0, -1.0, 0.0);    //左下頂點

    glColor3f(0.0, 0.0, 1.0);        //設定畫筆顔色
    glVertex3f(1.0, -1.0, 0.0);     //右下頂點

    glEnd();
    //-----------------------------------------
    //繪制三角形結束


    //開始繪制正方形
    //-----------------------------------------
    glTranslatef(3.0, 0.0, 0.0);

    glColor3f(0.5, 0.5, 1.0);    //設定畫筆顔色

    glBegin(GL_QUADS);

    glVertex3f(-1.0, 1.0, 0.0);     //左上頂點

    glVertex3f(1.0, 1.0, 0.0);      //右上頂點

    glVertex3f(1.0, -1.0, 0.0);     //右下頂點

    glVertex3f(-1.0, -1.0, 0.0);    //左下頂點

    glEnd();
    //-----------------------------------------
    //繪制正方形結束
}      

在繪制三角形的時候,每個頂點前都設定了畫筆顔色,是以三角形每個頂點的顔色會不一樣,這就是平滑着色;

在繪制正方形的時候,隻設定了一次畫筆顔色,是以正方形就一種顔色,這就是單調着色;

void GL_Test::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除螢幕和深度緩存

    glLoadIdentity();   //重置目前的模型觀察矩陣

    glTranslatef(-1.5, 0.0, -6.0);

    //開始繪制三角形
    //-----------------------------------------
    glBegin(GL_TRIANGLES);

    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(0.0, 1.0, 0.0);      //上頂點

    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(-1.0, -1.0, 0.0);    //左下頂點

    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(1.0, -1.0, 0.0);     //右下頂點

    glEnd();
    //-----------------------------------------
    //繪制三角形結束


    //開始繪制正方形
    //-----------------------------------------
    glTranslatef(3.0, 0.0, 0.0);

    glBegin(GL_QUADS);

    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(-1.0, 1.0, 0.0);     //左上頂點

    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(1.0, 1.0, 0.0);      //右上頂點

    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(1.0, -1.0, 0.0);     //右下頂點

    glColor3f(1.0, 1.0, 0.0);
    glVertex3f(-1.0, -1.0, 0.0);    //左下頂點

    glEnd();
    //-----------------------------------------
    //繪制正方形結束
}