2024年4月25日 星期四

C~電腦圖學日誌 Week10

Week10主題:TRT關節、階層性轉動

week10-1_glutWireCube_myBody_myArm


1.安裝freeglut,複製libfreeglut.a改成libglut32.a

2.新增專案取名成week10-1_glutWireCube_myBody_myArm

3.貼上week09-3_glutWireTeapot_glutWireCube_glutWireSphere

4.把void display()改寫,新增並呼叫myBody()    myArm()

void myBody(){

    glPushMatrix();

        glColor3f(1,0,0);///紅色

        glutWireCube(0.6);///myBody()

glPopMatrix();

}


void myArm(){

    glPushMatrix();

        glColor3f(0,1,0);///綠色

        glScalef(1,0.4,0.4);///myArm()

        glutWireCube(0.3);

glPopMatrix();

}




week10-2_rotate_myArm

1.新增專案取名成week10-2_rotate_myArm

2.貼上week10-1_glutWireCube_myBody_myArm

3.增加全域變數 float angle=0;///旋轉角度

4.在main()中加上glutIdleFunc(display);///自動旋轉

5.在display()中新增glRotatef()讓myArm()旋轉

glPushMatrix();

        glRotatef(angle++, 0, 0, 1);

        myArm();///呼叫綠色手臂

glPopMatrix();



week10-3_rotate_translate_myArm

1.新增專案取名成week10-3_rotate_translate_myArm

2.貼上week10-2_rotate_myArm

3.新增glTranslatef(0.15, 0, 0);///旋轉中心不變(目前在(0,0)),物件往右移動0.15



week10-4_translate_rotate_translate_myArm

1.新增專案取名成week10-4_translate_rotate_translate_myArm

2.貼上week10-3_rotate_translate_myArm

3.新增glTranslatef(0.3,  0.3, 0);///把旋轉中心移到右上

glPushMatrix();

        glTranslatef(0.3, 0.3, 0);///

        glRotatef(angle++, 0, 0, 1);

        glTranslatef(0.15, 0, 0);

        ///旋轉中心不變(目前在(0.3,0.3,0)),物件往右移動0.15

        myArm();///呼叫綠色手臂

   glPopMatrix();


week10-5_TRT_TRT_myArm

1.新增專案取名成week10-5_TRT_TRT_myArm

2.貼上week10-4_translate_rotate_translate_myArm

3.新增一套畫手插入原myArm()下一行

glPushMatrix();

            glTranslatef(0.15, 0, 0);///掛到肩上後再往右0.15

            glRotatef(angle++, 0, 0, 1);///旋轉

            glTranslatef(0.15, 0, 0);

            ///旋轉中心不變(目前在(0.45,0.3,0)),物件往右移動0.15

            myArm();

 glPopMatrix();


week10-6_left_right_myArm

1.新增專案取名成week10-6_left_right_myArm

2.貼上week10-5_TRT_TRT_myArm

3.新增左手,X軸移動(改負號)

glPushMatrix();

        glTranslatef(-0.3, 0.3, 0);///掛到肩上

        glRotatef(angle++, 0, 0, 1);///旋轉

        glTranslatef(-0.15, 0, 0);

        myArm();///呼叫綠色手臂

        glPushMatrix();

            glTranslatef(-0.15, 0, 0);///掛到肩上後再往左0.15

            glRotatef(angle++, 0, 0, 1);///旋轉

            glTranslatef(-0.15, 0, 0);

            myArm();

        glPopMatrix();

glPopMatrix();


week10-7_mouse_motion_angle_myArm

1.新增專案取名成week10-7_mouse_motion_angle_myArm

2.貼上week10-6_left_right_myArm

3.為了用mouse motion來操控,angle++改成angle

4.在main()中加上glutMotionFunc(motion);

5.新增void motion(int x,int y)函式

void motion(int x,int y){

    angle = x;

    glutPostRedisplay();///告訴GLUT有空時,重製畫面

}


week10-8_mouse_motion_angle_2_myArm

功能是為了讓左右手對稱

1.新增專案取名成week10-8_mouse_motion_angle_2_myArm

2.貼上week10-7_mouse_motion_angle_myArm

3.把display()中的,左手的 angle都改成 -angle




week10-9_PlaySound

功能是增加音樂

1.新增專案取名成week10-9_PlaySound

2.貼上week10-8_mouse_motion_angle_2_myArm

3.增加<windows.h>或<mmsystem.h>標頭檔

4.在main()中加入PlaySound("C:/horse.wav", NULL, SND_ASYNC);

(電腦直接讀wav檔,mp3很複雜~)

5.把老師給的horse.wav音檔移到C槽根目錄




上傳Github
















沒有留言:

張貼留言