FILE * fout=NULL; //宣告檔案指標變數
fout=fopen("filename.txt","w+");//開檔案,w+ 寫入更新
fprintf //印在檔案裡
glutInitWindowSize(600,600);//開啟小黑視窗的大小
glutInitWindowSize(600,600);//開啟小黑視窗的大小
第二節課複習Week11的關節移動
程式碼也跟11週的一樣
第三節課要先記住之前移動過的關節檔案
之後再把他開起來,就會像是他自己移動的感覺
程式碼如下,只要修改跟增加week11的一些東西
#include <stdio.h> #include <GL/glut.h> FILE * fout=NULL; FILE * fin =NULL; float angle[20];///NOW int angleID=1;///第幾個要轉動的關節 ///NOW3 void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(255,255,255);///白色的 glutSolidTeapot( 0.3 );///身體 glPushMatrix();///右邊手臂 glTranslatef(0.5, 0.13, 0);///(3) 掛在身體的右肩 glRotatef(angle[1], 0,0,1);///(2) 旋轉 glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸 glColor3f(1,0,0);///紅色的 glutSolidTeapot( 0.15 );///右手臂 glPushMatrix();///NOW2 glTranslatef(0.23, 0, 0);///(3) 掛在身體的右肘///NOW2 glRotatef(angle[2], 0,0,1);///(2) 旋轉///NOW2 glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2 glColor3f(1,0,0);///紅色的///NOW2 glutSolidTeapot( 0.15 );///右下手臂///NOW2 glPopMatrix();///NOW2 glPopMatrix(); glPushMatrix();///左邊手臂 glTranslatef(-0.5, 0.13, 0);///(3) 掛在身體的左肩 glRotatef(angle[3], 0,0,-1);///(2) 旋轉 glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸 glColor3f(1,0,0);///紅色的 glutSolidTeapot( 0.15 );///左手臂 glPushMatrix();///NOW2 glTranslatef(-0.23, 0, 0);///(3) 掛在身體的左肘///NOW2 glRotatef(angle[4], 0,0,-1);///(2) 旋轉///NOW2 glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2 glColor3f(1,0,0);///紅色的///NOW2 glutSolidTeapot( 0.15 );///左下手臂///NOW2 glPopMatrix();///NOW2 glPopMatrix(); glPushMatrix();///右邊大腿 glTranslatef(0.27, -0.25, 0); glRotatef(angle[5], 0,0,1); glTranslatef(0.15,0,0); glColor3f(1,0,0); glutSolidTeapot( 0.15 ); glPushMatrix();///NOW2 glTranslatef(0.2, 0, 0); glRotatef(angle[6], 0,0,1); glTranslatef(0.15, 0,0); glColor3f(1,0,0); glutSolidTeapot( 0.15 );///右小腿 glPopMatrix();///NOW2 glPopMatrix(); glPushMatrix();///左邊大腿 glTranslatef(-0.27, -0.25, 0); glRotatef(angle[7], 0,0,-1); glTranslatef(-0.15,0,0); glColor3f(1,0,0); glutSolidTeapot( 0.15 ); glPushMatrix();///NOW2 glTranslatef(-0.2, 0, 0); glRotatef(angle[8], 0,0,-1); glTranslatef(-0.15, 0,0); glColor3f(1,0,0); glutSolidTeapot( 0.15 ); glPopMatrix();///右小腿 glPopMatrix(); glutSwapBuffers(); } int oldX,oldY; void motion(int x,int y)//用滑鼠來設定x,y { angle[angleID] += (x-oldX); oldX=x;///NOW5 if(fout==NULL) fout=fopen("motion.txt", "w+");///NOW4 for(int i=0; i<20; i++){///NOW4 printf( "%.1f ", angle[i]);///NOW4 fprintf( fout, "%.1f ", angle[i]);///NOW4 } printf("\n");///NOW4 fprintf(fout, "\n");///NOW4 display();///NOW display();///NOW3 用滑鼠mouse來控制angle } void mouse(int botton,int state,int x,int y) { oldX = x; oldY=y; } void keyboard(unsigned char key, int x, int y)///NOW6 配合鍵盤 { if(key=='1') angleID=1;///NOW6 配合鍵盤 if(key=='2') angleID=2;///NOW6 配合鍵盤 if(key=='3') angleID=3;///NOW6 配合鍵盤 if(key=='4') angleID=4;///NOW6 配合鍵盤 if(key=='5') angleID=5;///NOW6 配合鍵盤 if(key=='6') angleID=6;///NOW6 配合鍵盤 if(key=='7') angleID=7;///NOW6 配合鍵盤 if(key=='8') angleID=8;///NOW6 配合鍵盤 /*if(key=='w' || key=='W'){///NOW4 小寫的 w
if(fout==NULL) fout=fopen("motion.txt", "w+");///NOW4 for(int i=0; i<20; i++){///NOW4 printf( "%.1f ", angle[i]);///NOW4 fprintf( fout, "%.1f ", angle[i]);///NOW4 } printf("\n");///NOW4 fprintf(fout, "\n");///NOW4 }*///沒有這一段也是能記錄 因為上面已經用滑鼠來記錄了 原本是做完案w來記錄用的 if(key=='r'){///NOW5 if(fin==NULL) fin = fopen("motion.txt", "r");///NOW5 for(int i=0; i<20;i++){///NOW5 fscanf(fin, "%f", &angle[i]);///NOW5 }///NOW5 } glutPostRedisplay();///和 display()很像,但更好 ///NOW5 } int main(int argc, char**argv) { glutInitWindowSize(600,600); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow("week11 TRT"); glutIdleFunc(display); glutMotionFunc(motion);///用滑鼠來控制angle glutMouseFunc(mouse);///now5要知道滑鼠的案件狀況 glutKeyboardFunc(keyboard);///NOW6 配合鍵盤 glutDisplayFunc(display); glutMainLoop(); }
沒有留言:
張貼留言