2024年2月26日 星期一

熱血學圖學round2

 1.從老師的網頁(https://jsyeh.org/3dcg10/)下載兩個檔案:1.data 2.win32先解壓縮win32的檔案 , 然後把data資料夾移到windows資料夾打開 Shapes.exe

                                       👇





                      👇


                                      👇


                                       👇

備註(Shapes.exe): 1. mouse右鍵 , 在右邊可切換 點.線.面

                                2.mouse右鍵 , 在左邊可切換大的頂點、逐個色彩

                                3.mouse左鍵 , 在右邊可按綠色數字上下調整


2.MOODLE解壓縮 freeglut-MinGW-3.0.0-1.mp.zip

把解壓縮完的檔案移到桌面

把124KB的檔案改名成 libglut32.a

開新的專案命名week02_GLUT_color_teapot

解壓縮到C:\Users\austi\OneDrive\桌面\freeglut (我自己的電腦)

➡把上週的十行複製到sourse➡新增一行程式碼:glColor3f(1,1,0),可以

   茶壺變黃色

按 Build&Run看到程式執行

備註:

       1.glColor3f(r,g,b)可以調整顏色 , r.g.b的值必須要在0跟1之

          間 ,3f的意思是3個浮點數。

          eg: (0,1,0) 綠色, (1,0,0) 紅色, (0,0,1) 藍色, (1,1,0) 黃色   

      2.glVertex2f(x,y)可以改頂點座標

                                    👇

                                   👇

                               👇

                               👇 

                                                    👇

 

                                                      👇

                                                    👇glColor3f(1,1,0)把茶壺變黃色




2-2.第一個程式 : week02_GLUT_color_teapot

       可使用小畫家來選取顏色 ➡ / 255.0(因為要介於0跟1之間)

      例如: 在小畫家當中是(247,180,171) OpenGL要改為(247/255.0,180/255.0,171/255.0)

-----------------------------------------------------------------------------------------------

#include <GL/glut.h>

void display()

{

    glColor3f(247/255.0,180/255.0,171/255.0);///安妮雅頭髮顏色

    glutSolidTeapot(0.3);///畫一個實心的茶壺,大小是0.3

    glColor3f(251/255.0,233/255.0,219/255.0);///安妮雅臉的顏色

    glutSolidTeapot(0.2);

glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方

}

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

{ ///上面是特別的main函式,有很多參數

glutInit(&argc, argv);///把GLUT開起來 (GLUT初始化)

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

        ///上面這行是把顯示的模式設定好

glutCreateWindow("GLUT Shapes");///要開視窗

glutDisplayFunc(display);///要顯示的對應函式

glutMainLoop();///最後用main迴圈,壓在最後面

}

-----------------------------------------------------------------------------------------------


3.練習使用頂點: 第二個程式 : week02_glut_circle_cos_sin

                      glBegin(GL_POLYGON); glColor3f(r,g,b); glVertex2f(x,y);

                      --------------------------------------------------------------------------
                                                                      
                                            以上是期中考10題其中3題,佔30分
----------------------------------------------------------------------------------------------------------

#include <GL/glut.h>

void display()

{

    glBegin(GL_POLYGON);///開始畫                                                      

        glColor3f(1,0,0); glVertex2f (0,1);///頂點在x=0 , y=1

      glColor3f(0,1,0); glVertex2f (1,-0.6);///頂點在x=1 , y=-0.6

        glColor3f(0,0,1); glVertex2f (-1,-0.6);///頂點在x= -1 , y= -0.6

    glEnd();///結束

glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方

}

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

{ ///上面是特別的main函式,有很多參數

glutInit(&argc, argv);///把GLUT開起來 (GLUT初始化)

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

        ///上面這行是把顯示的模式設定好

glutCreateWindow("GLUT Shapes");///要開視窗

glutDisplayFunc(display);///要顯示的對應函式

glutMainLoop();///最後用main迴圈,壓在最後面

}

-----------------------------------------------------------------------------------------------

例如:這個三角形的三個頂點分別在 , ( 0 , 1 ) 、( 1 , -0.6 )、 ( -1 , -0.6 ) 

 




4. 第三個程式 : week02_glut_triangle

    a.開啟小畫家,把圖片放上去

    b.小畫家的座標裡,左上角是 (0,0) , 右下角是 (400,400) (假設圖片寬度是400*400)

    c.關於座標,OpenGL 預設是「正中間0,0」,右邊是+1,左邊是-1,上面是+1,下面是-1

    d.把小畫家的(x座標-中心點200)/200.0變成 OpenGL的座標口訣:減一半、再除一    

       半.0

    e.y座標比較麻煩-(y座標-中心點200)/200.0,口訣:減一半、除一半,再加負號

    f.ctrl+E可以調整畫布大小

-----------------------------------------------------------------------------------------------

#include <GL/glut.h>

void display()

{

    glBegin(GL_POLYGON);///開始畫


        glColor3f(1,1,1);

        glVertex2f ( (30-200) / 200.0 , -(45-200) / 200.0 );

        glVertex2f ( (46-200) / 200.0 , -(102-200) / 200.0 );

        glVertex2f ( (84-200) / 200.0 , -(23-200) / 200.0 );

        ///口訣:減一半、除一半、y變負號

    glEnd();///結束

glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方

}

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

{ ///上面是特別的main函式,有很多參數

glutInit(&argc, argv);///把GLUT開起來 (GLUT初始化)

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

        ///上面這行是把顯示的模式設定好

glutCreateWindow("GLUT Shapes");///要開視窗

glutDisplayFunc(display);///要顯示的對應函式

glutMainLoop();///最後用main迴圈,壓在最後面

}

-----------------------------------------------------------------------------------------------



5.第四個程式 : week_02_glut_mspaint_help_draw

    練習用程式畫圓 - 畫出一個米老鼠

-----------------------------------------------------------------------------------------------

#include <GL/glut.h>

#include <math.h>

void display()

{

    glBegin(GL_POLYGON);///開始畫

    for(float a=0 ; a<3.1415926*2 ; a+=0.1){ ///如果3.1415926沒有*2 , 會變半圓

        glVertex2f(cos(a),sin(a));///cos(a),sin(a)可以乘其他數值改變圓形的大小形狀

    }

    glEnd();///結束

glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方

}

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

{ ///上面是特別的main函式,有很多參數

glutInit(&argc, argv);///把GLUT開起來 (GLUT初始化)

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

        ///上面這行是把顯示的模式設定好

glutCreateWindow("GLUT Shapes");///要開視窗

glutDisplayFunc(display);///要顯示的對應函式

glutMainLoop();///最後用main迴圈,壓在最後面

}

-----------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------

#include <GL/glut.h>

#include <math.h>

void myCircle(float cx,float cy ,float r)

{

    glBegin(GL_POLYGON);///開始畫

    for(float a=0;a<3.1415*2;a+=0.1){///很多不同的角度

        glVertex2f(r*cos(a)+cx,r*sin(a)+cy);

    }

    glEnd();///結束

}

void display()

{

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

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

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

    glColor3f(0,0,0); myCircle(0,-0.3,0.7);

glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方

}

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

{ ///上面是特別的main函式,有很多參數

glutInit(&argc, argv);///把GLUT開起來 (GLUT初始化)

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

        ///上面這行是把顯示的模式設定好

glutCreateWindow("GLUT Shapes");///要開視窗

glutDisplayFunc(display);///要顯示的對應函式

glutMainLoop();///最後用main迴圈,壓在最後面

}

-----------------------------------------------------------------------------------------------

6.github上傳 , exe和depend檔不用上傳












沒有留言:

張貼留言