2024年2月29日 星期四

我的品牌week02

 1.下載課本範例https://jsyeh.org/3dcg10/



2.window.zip解壓縮

3.data.zip解壓縮


4.點擊 Shape.exe可以讓你試用mouse來切換程式的參數

5.左邊的mouse右鍵,可以切換大頂點、多一點顏色

6.右邊的mouse右鍵,可以切換點、線、面

7.右邊的mouse左鍵,按住綠色數字、可以上下拖拽數字大小



來試試看GL_TRIANGLES三角形

1.左邊設成多一點顏色toogle colors at vertices

2.左邊切換成TRIANGLES

3.每個頂點,都可以有自己的色彩




今天的第一個程式

0.先把freeglut下載並且複製到桌面,再把freeglut\lib\libfreeglut.a複製成libglut32.a

1.File-New-Project,glut專案,week02_glut_color_teatop,小心點點點,要選桌面

2.上週10行直接拿來用

3.再加上一行 glColor3f(1,1,0);



用小畫家,來挑選我們需要的顏色
1.開啟小畫家,把你要畫的圖,貼進去
2.利用滴管來吸色,再用編輯色彩來看他的數字
3.程式裡glColor3f(r,g,b); 是0.0~1.0中間,所以我們就把吸到的顏色/255.0就可以了。
4.ex. glColor3f(247/255.0,180/255.0,171/255.0);
5.我們來畫兩個茶壺,先畫大的再畫小的,不同色彩


來畫一個三角形吧
1.File-New-Project,Glut專案,Week02_glut_color_triangle
2.貼上week02_glut_color_teatop程式碼
3.修改程式碼

#include <GL/glut.h>///第18行存下來
void display()
{
    glBegin(GL_POLYGON);
        glColor3f(1,0,0);glVertex2f(0,1);
        glColor3f(0,1,0);glVertex2f(+1,-0.6);
        glColor3f(1,0,0);glVertex2f(-1,-0.6);
    glEnd();
    glutSwapBuffers();
}

int main(int argc, char*argv[])///第138行,main()函式
{
    glutInit(&argc, argv);///140行, 開啟GLUT功能
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///148行,設定顯示模式
    glutCreateWindow("GLUT Shapes");///145行,開一個
    glutDisplayFunc(display);///148行,要用display()函式來畫圖
    glutMainLoop();///174行, 主要的迴圈,在這裡一直運作,不結束
}





用小畫家,幫我們找到頂點座標
1.File-New-Project,Glut專案week02_glut_glVertex_mspaint
2.開一個小畫家,把一張圖放進來。建議400*400
3.口訣:減一半、除一半、Y加負號
#include <GL/glut.h>///第18行存下來
void display()
{
    glBegin(GL_POLYGON);
        glVertex2f((34-200)/200.0,-(76-200)/200.0);
        glVertex2f((50-200)/200.0,-(131-200)/200.0);
        glVertex2f((85-200)/200.0,-(59-200)/200.0);
    glEnd();
    glBegin(GL_POLYGON);
        glVertex2f((383-200)/200.0,-(79-200)/200.0);
        glVertex2f((348-200)/200.0,-(146-200)/200.0);
        glVertex2f((312-200)/200.0,-(55-200)/200.0);
    glEnd();
    glutSwapBuffers();
}

int main(int argc, char*argv[])///第138行,main()函式
{
    glutInit(&argc, argv);///140行, 開啟GLUT功能
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///148行,設定顯示模式
    glutCreateWindow("GLUT Shapes");///145行,開一個
    glutDisplayFunc(display);///148行,要用display()函式來畫圖
    glutMainLoop();///174行, 主要的迴圈,在這裡一直運作,不結束
}




如何畫圓
1.File-New-Project,Glut專案week02_glut_cos_sin_circle
2.寫程式碼
#include <GL/glut.h>///第18行存下來
#include <math.h>
void display()
{
    glBegin(GL_POLYGON);
        for(float a=0;a<=3.1415*2;a+=0.1){
            glVertex2f(cos(a),sin(a));
        }
    glEnd();

    glutSwapBuffers();
}

int main(int argc, char*argv[])///第138行,main()函式
{
    glutInit(&argc, argv);///140行, 開啟GLUT功能
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///148行,設定顯示模式
    glutCreateWindow("GLUT Shapes");///145行,開一個
    glutDisplayFunc(display);///148行,要用display()函式來畫圖
    glutMainLoop();///174行, 主要的迴圈,在這裡一直運作,不結束
}





如何移動圓
1.紅色為修改圖形半徑
2.橘色為同型x軸移動方向
3.綠色為同型y軸移動方向






如何畫米奇
1.修改程式
#include <GL/glut.h>///第18行存下來
#include <math.h>
void myCircle(float x,float y,float r){
glBegin(GL_POLYGON);
        for(float a=0;a<=3.1415*2;a+=0.1){
            glVertex2f(r*cos(a)+x,r*sin(a)+y);
        }
    glEnd();
}
void display()
{
    myCircle(0.5,0.5,0.3);
    myCircle(-0.5,0.5,0.3);
    myCircle(0,-0.1,0.6);

    glutSwapBuffers();
}

int main(int argc, char*argv[])///第138行,main()函式
{
    glutInit(&argc, argv);///140行, 開啟GLUT功能
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///148行,設定顯示模式
    glutCreateWindow("GLUT Shapes");///145行,開一個
    glutDisplayFunc(display);///148行,要用display()函式來畫圖
    glutMainLoop();///174行, 主要的迴圈,在這裡一直運作,不結束
}



上傳程式碼

















            






沒有留言:

張貼留言