2013年6月7日 星期五

第16週課堂


T-R-T觀念講解
鍵盤控制多關節
用Maya將模型取消Combine再輸出成obj檔案,並掛載進程式碼中,
身體部份得存成諸多obj檔案並分批掛載進去程式碼

多關節程式範例
FILE *fout=NULL;
FILE *fin=NULL;
void keyboard(unsigned char key, int x, int y)
{
if(key=='0') index=0;
else if(key=='1') index=1;
else if(key=='2') index=2;
else if(key=='3') index=3;
else if(key=='4') index=4;
else if(key=='5') index=5;
if(key=='a') rot[index]++;
else if(key=='A') rot[index]--;
if(key=='s'){
if(fout==NULL) fout=fopen("motion.txt", "w+");
for(int i=0;i<10;i++){
fprintf(fout, "%.1f\t", rot[i]);
}
fprintf(fout, "\n");
}
if(key=='r'){
if(fin==NULL) fin=fopen("motion.txt", "r");
for(int i=0;i<10;i++){
fscanf(fin, "%f", &rot[i]);
printf("%f ",rot[i]);
}
}
for(int i=0;i<10;i++){
printf("%.1f\t",rot[i]);
}
printf("\n");
glutPostRedisplay();
}

可以做內插的程式碼
float rotOld[10]={0,0,0,0,0,0,0,0,0,0};
float rotNew[10]={0,0,0,0,0,0,0,0,0,0};
FILE *fout=NULL;
FILE *fin=NULL;
void player(int t){
if(t%50==0){
for(int i=0;i<10;i++){
rotOld[i]=rotNew[i];
fscanf(fin, "%f", &rotNew[i]);
printf("%f ",rotNew[i]);
}
}
float a= (t%50)*0.02;
for(int i=0;i<10;i++){
rot[i]=rotNew[i]*a + rotOld[i]*(1-a);
}
glutTimerFunc(20, player, t+1);
glutPostRedisplay();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='0') index=0;
else if(key=='1') index=1;
else if(key=='2') index=2;
else if(key=='3') index=3;
else if(key=='4') index=4;
else if(key=='5') index=5;
if(key=='a') rot[index]++;
else if(key=='A') rot[index]--;
if(key=='s'){
if(fout==NULL) fout=fopen("motion.txt", "w+");
for(int i=0;i<10;i++){
fprintf(fout, "%.1f\t", rot[i]);
}
fprintf(fout, "\n");
}
if(key=='r'){
if(fin==NULL) fin=fopen("motion.txt", "r");
for(int i=0;i<10;i++){
fscanf(fin, "%f", &rot[i]);
printf("%f ",rot[i]);
}
}
if(key=='p'){
if(fin==NULL) fin=fopen("motion.txt", "r");
for(int i=0;i<10;i++){
fscanf(fin, "%f", &rotNew[i]);
printf("%f ",rotNew[i]);
}
glutTimerFunc(100, player, 0);
}
for(int i=0;i<10;i++){
printf("%.1f\t",rot[i]);
}
printf("\n");
glutPostRedisplay();
}

沒有留言:

張貼留言