先準備上課環境
0. 安裝 freeglut 目錄
1. 安裝openCV 要add path
2. 設定codeblocks complier
## week14-1_angle_motion_save (複製13-3的程式碼)
float angleX[10] = {};
float angleY[10] = {};///mouse motion時,可同時改2個軸的轉動
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();///加入旋轉
glRotatef(180,0,1,0);
glRotatef(angleX[0],1,0,0);
glRotatef(angleX[1],0,1,0);
drawBody(); 身體
glPushMatrix();
glTranslatef(-0.15,0,0);
glRotatef(angleX[1],1,0,0);
glRotatef(angleY[1],0,1,0);
glTranslatef(-0.025,-0.05,0);
drawUpper();上手臂
glPushMatrix();
glTranslatef(0,-0.1,0);
glRotatef(angleX[2],1,0,0);
glRotatef(angleY[2],0,1,0);
glTranslatef(0,-0.2,0);
drawLower(); 下手臂
glPopMatrix();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
設定angleX 跟angleY 可以同時改兩個軸轉動
按 0 1 2 鍵,可以分別對身體、上手臂、下手臂轉動
## week14-2_alpha_blending
複製14-1的程式碼
開啟excel 檔案
alpha 0~1的公式 =A2/20
內插結果的公式是 =D2*B2+C2*(1-B2)
內插結果 新的*alpha+ 舊的*(1-alpha) 如果alpha 是0是舊的 alpha是1是新的
現在要寫程式碼來算內插結果
加了Timer計時器 設定每秒都會呼叫一次
void timer(int t){ ///week12
glutTimerFunc(1000,timer,t+1);
printf("你呼叫了timer(%d)\n",t);///week12
}
前面要 void timer(int t);///函式的形狀宣告
加入if(key=='p'){ ///play播放
glutTimerFunc(0,timer,0);
}
一開始不會馬上執行,按 p 鍵才會開始跳timer
加入這些程式 先按s可以儲存動作(座標) 按 p 就會照著剛剛儲存的動作去運作
void timer(int t){ ///week12
glutTimerFunc(50,timer,t+1); 1000ms = 一秒 50ms代表在一秒內完成20個動作
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];
}
glutPostRedisplay();
printf("你呼叫了timer(%d)\n",t);///week12
}
##上傳github
沒有留言:
張貼留言