2024年2月29日 星期四

C~電腦圖學日誌 Week02

點線面色彩

(1)去https://jsyeh.org/3dcg10/下載windows跟data檔案
     並把解完壓縮的data檔案拖到windows檔案裡


(2)並開啟windows中的Shapes.exe執行檔
右視窗的右鍵可切換
點、線、面三種主要功能

左視窗的右鍵可調
是否顯示頂點
程式碼多寡
調3角形顏色

week02_glut_color_teapot

(1)把freeglut下載到桌面並把libfreeglut.a複製改成libglut32.a
(2)開GLUT專案並改名成week02_glut_color_teapot儲存路徑選桌面


(3)把上週10行程式碼貼上
     並加上glColor3f(1,1,0);改顏色

用小畫家滴管工具吸取想要的顏色

於編輯色彩中獲得該顏色的RGB數值

雙色茶壺

glColor3f(r,g,b);///參數浮點數數值是介於0~1
glutSolidTeapot(0.3);茶壺的大小
(1)先做大茶壺在做小茶壺
    #include <GL/glut.h>///貼上周10行的程式
    void display()
    {
        glColor3f(247/255.0,180/255.0,171/255.0);///今天新加的
        glutSolidTeapot(0.3);

        glColor3f(233/255.0,219/255.0,205/255.0);///今天新加的
        glutSolidTeapot(0.2);

        glutSwapBuffers();
    }

    int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
        glutCreateWindow("week02_color_teapot");
        glutDisplayFunc(display);

        glutMainLoop();
    }


week02_glut_color_triangle

(1)開一個新GLUT專案並取名為week02_glut_color_triangl
     畫出彩色3角形
    void display()
    {
        glBegin(GL_POLYGON);///開始畫
        
            glColor3f(1,0,0);   glVertex2f(0,1);///頂點(x,y)
            glColor3f(0,1,0);   glVertex2f(1,-0.6);
            glColor3f(0,0,1);   glVertex2f(-1,-0.6);
        glEnd();///結束畫

        glutSwapBuffers();
    };

week02_glut_glVertex2f_mspaint

(1)開一個新GLUT專案並取名為week02_glut_glVertex2f_mspaint
    小畫家的鼠標會有座標搭配他撰寫程式
    
    口訣~減一半除一半Y軸加負號      
    
glBegin(GL_POLYGON);///開始畫
            glVertex2f((28-200)/200.0,-(37-200)/200.0);
            glVertex2f((43-200)/200.0,-(101-200)/200.0);
            glVertex2f((81-200)/200.0,-(22-200)/200.0);
    glEnd();///結束畫

week02_glut_cos_sin_circle

(1)用for迴圈搭配sin cos 畫圓
void display()
    {
        glBegin(GL_POLYGON);///開始畫
        for(float a=0;a<=3.145*2;a+=0.1){
            glVertex2f( cos(a), sin(a) );
        }
        glEnd();///結束畫

        glutSwapBuffers();
    };

(2)改變圓的位置跟大小
void display()
    {
        glBegin(GL_POLYGON);///開始畫
        for(float a=0;a<=3.145*2;a+=0.1){
            glVertex2f( 0.2*cos(a)+0.5, 0.2*sin(a)+0.5 );
            ///              r半徑            cx圓X            cy圓Y
        }
        glEnd();///結束畫

        glutSwapBuffers();
    };
(3)把畫圓程式改成myCricle函式
void myCircle(float x,float y,float r){
        glBegin(GL_POLYGON);
        for(float a=0;a<=3.145*2;a+=0.1){
            glVertex2f( r*cos(a)+x, r*sin(a)+y );
        }
        glEnd();
    }

(4)最後搭配myCricle函式畫出米奇
void display()
    {
        myCircle( 0.5, 0.5, 0.3);
        myCircle(-0.5, 0.5, 0.3);
        myCircle(   0,-0.1, 0.6);
        glutSwapBuffers();
    };

github



















沒有留言:

張貼留言