2020年6月10日 星期三

week_16 動畫 內插

動畫



開上週檔案
在安裝 freeglut
在執行,mouse motion 做動作 S 存檔
在 freeglut/bin 裡找到 motion.txt
改裝他, copy很多行



void timer(int t)///TODO1601:自動播放
{
    glutTimerFunc(100, timer , t+1);///TODO1601:
    ///鬧鐘叫了,再撥下一個100ms之後叫,timer(t+1)
    if(t==0){///TODO1601:第1次要先讀新的
         if(fin==NULL) fin=fopen("motion.txt","r");
         for(int i=0; i<10; i++){
            fscanf(fin, "%d", &newAngle[i]);
         }
    }
    if(t%10==0){///TODO1601:我們要把新的變舊的
        for(int i=0; i<10; i++){
            oldAngle[i] = newAngle[i];///TODO1601:新的變舊的
            fscanf(fin, "%d", &newAngle[i]);///TODO1601:在讀新的
        }
    }
    float Alpha = (t%10)/10.0;///TODO1601: 0.0~~1.0
    for (int i=0; i<10; i++){///TODO1601: Alpha內插
        angle[i]=Alpha*newAngle[i]+(1-Alpha)*oldAngle[i];
        printf("%d",angle[i]);
    }
    printf(" %.2f\n",Alpha);
    glutPostRedisplay();///TODO1601:自動播放
}



    if(key=='p'){///TODO1601:自動撥放}
       glutTimerFunc(0, timer, 0);///TODO1601:
    /// Oms 馬上開啟timer, timer(0)
 }



   glTranslatef( angle[11]/200.0, angle[12]/200.0, 0);
        ///TODO1602:增加關節, 整數變成 float,才不會跳

    for(int i=0; i<20; i++){///TODO1602:增加關節
 if(key=='a') angleID=11;///移動的關節 ///TODO1602:增加關節

 glPopMatrix();///TODO1602:保護一下

沒有留言:

張貼留言