2018年3月11日 星期日

Week02 點、線、面、顏色

(1)複習上禮拜所教的OpenGL與OpenGL GLUT

OpenGL 設定檔名與儲存地↓


OpenGL GLUT 設定檔名與儲存地↓


忘了一些沒關係,詳細看Week01
         (GO!( • ω•́  )連結啟動http://2018graphicsa.blogspot.tw/2018/03/week-01_36.html)。


(2)用GLUT做茶杯

1.先開啟 New Project的OpenGL GLUT!

2.然後將main.cpp裡面的程式"全部刪掉"!!(Ctrl+A後Backspace鍵,馬上搞定!)


3.開始自己第一個GLUT的程式!!先打上開頭檔與主要函式Main。


                                [
#include <GL/glut.h>


int main(int argc,char **argv)
{                                                
                                                           ......;
                                                         }
      是為了把作業系統的參數放入,
而一般常見為↓                        
int main()                                
{                                                
                                                           ......;
                                                         }
或是↓                                       
int main(void)                          
{                                                
                                                           ......;
                                                         }
也可以這樣寫↓                        
int main(int argc,char  *argv[])
{                                                
                                                           ......;
                                                         }
argc為表示輸入的參數個數。
argv為表示輸入的參數。      

                                                                                                    ]
4.打上茶杯的程式碼。(建議可以另開另一個GLUT檔去對照)


[                                                                                                  
程式碼:                                                                             
#include <stdio.h>                                                              
#include <GL/glut.h>                                                          
void display()                                                                      
{                                                                                          
    glClear(GL_COLOR_BUFFER_BIT);                    
   // 為清理畫面                                                           
glutSolidTeapot(0.3);                                            
     //本身就有直接畫出茶壺的程式,()為設定大小    
    glutSwapBuffers();                                                    
//交換double buffers 來顯示畫出的東西              
}                                                                                        
int main(int argc,char **argv)                                          
{                                                                                          
    glutInit(&argc, argv);                                               
//初始Init(Initialize)GLUT參數設定                  
    glutInitDisplayMode(GLUT_DOUBLE);              
//顯示模式為double buffers                                 
                      //(其他像是 GLUT_RGB與GLUT_DEPTH 老師以後會教)    
    glutCreateWindow("QWQ 你好我是視窗名稱!!");
//建立視窗,("...")裡的輸入為視窗顯示名稱    
    glutDisplayFunc(display);                                        
//顯示函式display()用來畫圖的                           
    glutMainLoop();                                                        
//主要的迴圈,用來控制程式                             
}                                                                                          
                                                                                                ]
對照原本的GLUT程式↓

(在主要函式Main裡,紅框的程式有些眼熟~~)

(3)物體上色與背景色(依舊用茶杯)
1.先物體上顏色,用glColor()
(PS:程式碼前面的gl是代表OpenGL函式)
[                                                                                                   
glColor3f(64/255.0,128/255.0,128/255.0);

顏色函式(   R(紅)  ,   G(綠)   ,   B(藍)    );

↑glColor 3 f 的 3 為可變的參數個數,
                                f 為浮點數,所以後方()裡
                                                               要顯示成浮點數(介於00~01)必須/255.0。

另外,還可以用glColor3ub();↓ 

glColor3ub(64,128,128);

  顏色函式(R(紅),G(綠), B(藍));

              ↑glColor 3 ub 的 3 一樣為可變的參數個數,
                                                  ub 的全名為 Unsigned char byte,
                                                                                可以直接輸入RGB的數據不用變成浮點數。
                                                                                                  ]

!!!PS:想要取顏色的RGB數據,可以使用小畫家↓


好用的滴管,吸取你所擁有的顏色,只怕你沒有範例可以吸取,
沒有範例也沒關係,打開編輯顏色,讓你直接調成你想要的,
而RGB的數據都在下面,直接拿取數據就好,
實用的小畫家,你值得擁有。

2.用好物體上色換背景上色

行行!!我知道配色很詭異!!看程式!看程式!

glClearColor(0/255.0,128/255.0,192/255.0,0);

              背景顏色函式(R(紅),G(綠),B(藍),Alpha(透明程度));

↑格式與物體上色的函式差不多,
而()內要/255.0變浮點數是因為要"交換double buffers 來顯示畫出的東西",
要注意()裡最後的Alpha絕對不可以缺少,不透明就設為1。


(4)用GLUT 畫出彩色三角形

1.使用 glBegin(GL_POLYGON); 與 glEnd(); 來畫


[                                                                                                   
程式碼:                                                                          
glBegin(GL_POLYGON);                                          
        glColor3f(1,0,0);   glVertex2f(-1,-1);                    
        glColor3f(0,1,0);   glVertex2f(1,-1);                    
        glColor3f(0,0,1);   glVertex2f(0,1);                      
    glEnd();                                                                           

如果要畫多邊形就必須用                                          
glBegin(GL_POLYGON);
                                                            來做開始!
glEnd();                              
                                                            來做結束!
而其中裡面的  glColor3f(R,G,B);  的物體上色函式,
以在上方教過,可以網上找尋,                                  
                           再來是  glVertex2f( x的座標 , y的座標 );  的函式,                                
                                        為設定頂點座標(數據範圍-1~1)。   
                                                                                                 ]

PS:小畫家也可以找到圖的座標↓


左下方為座標,再根據畫布大小作為比例!!

這樣是不是就可以用程式來畫畫~果然是資訊科的阿~別人畫筆我們程式XDD



沒有留言:

張貼留言