2023年2月23日 星期四

week02 蔣


Week02

Week02-1

打開Codeblocks延續上禮拜先建立OpenGLUT專案

並點開左邊的main.cpp


縮減程式碼並保留
#include <GL/glut.h>

int main(int argc, char *argv[ ])

{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week02");
    glutDisplayFunc(display);
    glutMainLoop( );
}
且新增以下程式碼
void display( )

{
    glutSolidTeapot( 0.5 );
    glutSwapBuffers( );
}


並執行以下程式碼
就會跑出下面這個小茶壺





將以下程式碼新增

    glColor3f(1,1,0);        變成黃色
    glutSolidTeapot( 0.5 );         ( )內數值為茶壺大小

    glColor3f(0,1,0);        變成綠色
    glutSolidTeapot( 0.3 );        ( )內數值為茶壺大小

以及將19行的        glutCreateWindow
括號內改為Week02 出來的視窗就會變成Week02




執行修改後的程式後會顯示以下畫面
黃色的大茶壺以及綠色的小茶壺



Week02-2

(一)

新增一個新的GLUT專案並複製剛剛茶壺的程式碼

將程式碼保留一個茶壺
並新增三角形的新程式碼
glColor3f(0, 1, 0);        綠色

    glBegin(GL_POLYGON);
        glVertex2f(0,1);    上方
        glVertex2f(-1,-1);       左下角
        glVertex2f(+1,-1);        右下角

    glEnd();





執行修改完的程式碼
就會跑出以下畫面 綠色三角形和黃色茶壺




(二)



修改剛剛的程式碼把每個頂點變成不同的顏色
讓色彩和頂點的程式放在同一行 讓其對應顏色
       glColor3f(1, 0, 0); glVertex2f(0,1);           上面 > 紅色
       glColor3f(0, 1, 0); glVertex2f(-1,-1);        左下角 > 綠色
       glColor3f(0, 0, 1); glVertex2f(+1,-1);        右小角 > 藍色




執行修改好的程式碼
就會跑出以下畫面
不同顏色的三角形就出來囉




(三)



複製剛剛的程式碼在新增一個新的GLUT檔案
並貼上 且新增以下程式
利用小畫家來看座標來幫助我們寫程式

        glVertex2f( (65-100)/100.0, -(54-100)/100.0 );        因小畫家Y相反所以後面要多加-號
        glVertex2f( (34-100)/100.0, -(138-100)/100.0 );
        glVertex2f( (59-100)/100.0, -(138-100)/100.0 );
        glVertex2f( (87-100)/100.0, -(53-100)/100.0 );



修改完程式之後 執行結果如下
會出現以下四邊形


(四)


新增一個新的GLUT專案 這次目的是如何寫出圓形的圖形
複製剛剛的程式碼
修改裡面的程式碼為下列程式碼
#include <math.h>
void myCircle(float r, float x, float y)
{
    glBegin(GL_POLYGON);
    for(float a=0; a<=2*3.141592; a+=0.01){
        glVertex2f( r*cos(a) +x, r*sin(a) +y);
    }
    glEnd();
}
void display()
{
    glColor3f(233/255.0, 141/255.0, 128/255.0);
    myCircle(0.5, 0, 0);

    glColor3f(1,1,0);
    myCircle(0.3,0.5,0.5);

    glColor3f(1,0,0);
    myCircle(0.3,-0.5,0.5);

    glColor3f(0,1,0);
    myCircle(0.3,-0.5,-0.5);

    glColor3f(0,0,1);
    myCircle(0.3,0.5,-0.5);

    glutSwapBuffers();
}


修改完後執行程式碼
執行結果如下




色彩不同且位置不同的圓形就出來囉


沒有留言:

張貼留言