Week14
-------------------------------------------------------------------
week14
week13-3_File_fclose_fprintf_fscanf 到桌面
改目錄名 week14-1_angle_motion_save
將 angle[20]={}; 修改成 angleX[10]={};
新加 angleY[10]={};
將 Body、Upper、Lower 修改成 glRotatef( angleX[0], 1, 0, 0);
glRotatef( angleY[0], 0, 1, 0);
fscanf(fin, "%f ", &angleX[i]);
fscanf(fin, "%f ", &angleY[i]);
//rintf("%.1f ", anglex[i]);
fprintf(fout, "%.1f ", angleX[i]);
fprintf(fout, "%.1f ", angleY[i]);
angleX[angleID] += y - oldY;
angleY[angleID] += x - oldX;
---------------------------------------------------------------
week14-2_alpha_blending
void timer(int t)
{
printf("你呼叫了 timer(%d)\n", t);
}
int main(int argc, char* argv[])
{
printf("程式開始執行\n");
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14-2_alpha_blending");
glutDisplayFunc(display);
glutIdleFunc(display); ///加入旋轉
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutTimerFunc(1000, timer, 1);
glutTimerFunc(2000, timer, 2);
glutTimerFunc(3000, timer, 3);
...
}
-------------------------------------------------------------
(1) void timer(int t); ///函式的形狀的宣告
void keyboard(unsigned char key, int x, int y){
if(key=='p'){ ///播放
glutTimerFunc(0, timer, 0);
}
///glutTimerFunc( 0, timer, 0);
if(key=='r'){
if(fin==NULL) fin = fopen("angle.txt", "r");
for(int i=0; i<10; i++){
fscanf(fin, "%f ", &angleX[i]);
fscanf(fin, "%f ", &angleY[i]);
}
glutPostRedisplay();
}
if(key=='s'){ ///存檔
if(fout==NULL) fout = fopen("angle.txt", "w+");
for(int i=0; i<10; i++){
printf("%.1f ", angleX[i]);
printf("%.1f ", angleY[i]);
fprintf(fout, "%.1f ", angleX[i]);
fprintf(fout, "%.1f ", angleY[i]);
}
printf("\n");
fprintf(fout, "\n");
}
修改 timer 讓機器人自己動
float oldAngleX[10] = {};
float oldAngleY[10] = {};
float newAngleX[10] = {};
float newAngleY[10] = {};
void timer(int t)
{
glutTimerFunc(50, timer, t+1);
if(fin==NULL) fin = fopen("angle.txt", "r");
if(t%20==0){
for(int i=0; i<10; i++){
oldAngleX[i] = newAngleX[i];
oldAngleY[i] = newAngleY[i];
fscanf(fin, "%f", &newAngleX[i]);
fscanf(fin, "%f", &newAngleY[i]);
}
}
float alpha = (t%20 / 20.0);
for(int i=0; i<10; i++){
angleX[i] = alpha * newAngleX[i] + (1-alpha) * oldAngleX[i];
angleY[i] = alpha * newAngleY[i] + (1-alpha) * oldAngleY[i];
printf("%.1f %.1f ", angleX[i], angleY[i]);
}
glutPostRedisplay();
printf("你呼叫了 timer(%d)\n", t);
}
沒有留言:
張貼留言