2013 電腦圖學 Computer Graphics
授課教師: 葉正聖
銘傳大學資訊傳播工程系
每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
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();
}
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言