2023年5月17日 星期三

Yuuta's-week14-Blending

 電腦圖學 2023-05-17 Week14

1. 主題: 切換關節
2. 主題: 切換移動、旋轉
3. 整合打光、貼圖
4. 主題: 計時器、內插動作

I. timer-茶壺逆時針旋轉

void timer(int t)
{
    glutTimerFunc(500, timer, t+1); //設定下一個
    angle += 90; //增加90度
    glutPostRedisplay(); //重畫畫面
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week14");

    glutDisplayFunc(display);
    glutTimerFunc(2000, timer, 0); //設定timer函式

    glutMainLoop();
}


II. timer play-按下鍵盤才開始轉動

void keyboard(unsigned char key, int x, int y)
{
    glutTimerFunc(0, timer, 0);
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week14");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard); //用keyboard啟動
    glutMainLoop();
}

III. timer play interpolation-加滑鼠控制, 即時更新角度


IV. 切換不同關節的顏色

int show[4] = {1, 1, 1, 1};/// 用 show[i] 來決定要不要顯示
int ID=0; ///0:頭, 1:身體, 2:上手臂, 3:下手臂
void keyboard(unsigned char key, int x, int y) {
    if (key=='0') ID = 0;
    if (key=='1') ID = 1;
    if (key=='2') ID = 2;
    if (key=='3') ID = 3;
    glutPostRedisplay();
}
FILE * fout = NULL;
FILE * fin = NULL;
float teapotX=0, teapotY=0; ///看移動值
float angle=0, angle2=0, angle3=0;///擺動作
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glScalef(0.2, 0.2, 0.2);
        if(body==NULL){
            head = glmReadOBJ("model/head.obj");
            body = glmReadOBJ("model/body.obj");
            uparmR = glmReadOBJ("model/uparmR.obj");
            lowarmR = glmReadOBJ("model/lowarmR.obj");
            ///glmUnitize(body);之後會改
        }
        if (ID==0) glColor3f(1,0,0); //選定的, 設紅色
        else glColor3f(1, 1, 1); //沒選定, 設白色
        if(show[0]) glmDraw(head, GLM_MATERIAL);

        if (ID==1) glColor3f(1,0,0); //選定的, 設紅色
        else glColor3f(1, 1, 1); //沒選定, 設白色
        if(show[1]) glmDraw(body, GLM_MATERIAL);///這行之後會改

        glPushMatrix();
            glTranslatef(teapotX, teapotY, 0);

            if (ID==2) glColor3f(1, 0, 0);
            else glColor3f(1, 1, 1); //沒選定, 設白色
            if (show[2]) glmDraw(uparmR, GLM_MATERIAL);
        glPopMatrix();

        if (ID==3) glColor3f(1,0,0); //選定的, 設紅色
        else glColor3f(1, 1, 1); //沒選定, 設白色
        if (show[3]) glmDraw(lowarmR, GLM_MATERIAL);
    glPopMatrix();
    glutSwapBuffers();
}

V. 加上小茶壺在正中心當作參考點























VI. 移動手臂















沒有留言:

張貼留言