動畫
開上週檔案
在安裝 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:保護一下

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:保護一下


沒有留言:
張貼留言