2019年5月16日 星期四

幽羊山之土-Week13_檔案

1.檔案

開啟GLUT程式,貝殼專案:
寫檔案:
#include <stdio.h> FILE *fout=NULL;///宣告檔案指標 int main()
{ fout= fopen("filename.txt","w+");///開檔案,w+是寫檔案
for(int i=0;i<10;i++){ fprintf(fout,"Hi word!\n");///印到檔案中 } }
關節案:
#include <stdio.h> FILE *fout2=NULL;///宣告 寫 檔案指標 FILE *fin2=NULL;///宣告 讀 檔案指標 float angle[20];///有20個關節 int main() { fout2= fopen("motion.txt","w+");///開檔案 for(int i=0;i<20;i++){ fprintf(fout2," %.2f ",angle[i]);///印到檔案中 }
fprintf(fout2,"\n"); }


2.關節,擺動作

進入transmission zero 網站,下載 freeglut 3.0.0 MinGW Package 
 在 CodeBlocks 開啟GLUTproject
階層轉動T-R-T 旋轉程式:
#include <GL/glut.h> #include <stdio.h>///NOW_FILE (0) float angle[20];///NOW2 int angleID=1;///NOW3 FILE * fout = NULL;///NOW_FILE (1) FILE * fin = NULL;///NOW_FILE_READ (1) void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glColor3f(1, 1, 1);///white glutSolidTeapot( 0.3 );///body glPushMatrix();///右邊 glTranslatef(0.2, 0, 0);///NOW2 (3)掛上去 glRotatef(angle[1], 0,0,1);///NOW2 ///(2)旋轉 glTranslatef(0.15, 0, 0);///NOW2 (1)旋轉中心 glColor3f(1, 0, 0);///red glutSolidTeapot( 0.2 );///right arm glPushMatrix(); glTranslatef(0.2, 0, 0);///NOW2 (3)掛上去 glRotatef(angle[2], 0,0,1);///NOW2 ///(2)旋轉 glTranslatef(0.15, 0, 0);///NOW2 (1)旋轉中心 glColor3f(1, 0, 0);///red glutSolidTeapot( 0.2 );///right lower arm glPopMatrix(); glPopMatrix(); glPushMatrix();///左邊 glTranslatef(-0.2, 0, 0);///NOW2 (3)掛上去 glRotatef(angle[3], 0,0,1);///NOW2 ///(2)旋轉 glTranslatef(-0.15, 0, 0);///NOW2 (1)旋轉中心 glColor3f(1, 0, 0);///red glutSolidTeapot( 0.2 );///right arm glPushMatrix(); glTranslatef(-0.2, 0, 0);///NOW2 (3)掛上去 glRotatef(angle[4], 0,0,1);///NOW2 ///(2)旋轉 glTranslatef(-0.15, 0, 0);///NOW2 (1)旋轉中心 glColor3f(1, 0, 0);///red glutSolidTeapot( 0.2 );///right lower arm glPopMatrix(); glPopMatrix(); glPopMatrix(); glutSwapBuffers(); } int oldX=0;///NOW2 void mouse(int button, int state, int x, int y)///NOW2 {///NOW2 oldX = x;///NOW2 } void motion(int x, int y)///NOW2 {///NOW2 angle[angleID] += x-oldX;///NOW3 oldX = x;///NOW2 if(fout == NULL) fout = fopen("motion.txt", "w+");///NOW_FILE (2) for(int i=0;i<20;i++){///NOW3 printf(" %.2f ", angle[i]);///NOW3 fprintf(fout, " %.2f ", angle[i]);///NOW_FILE } printf("\n");///NOW3 fprintf(fout, "\n");///NOW_FILE display();///NOW2 } void keyboard(unsigned char key, int x, int y)///NOW3 {///NOW3 if(key=='1') angleID=1;///NOW3 if(key=='2') angleID=2;///NOW3 if(key=='3') angleID=3;///NOW3 if(key=='4') angleID=4;///NOW3 if(key=='w'){///NOW_FILE fout = fopen("motion.txt", "w+");///NOW_FILE (2) } if(key=='r'){ if(fin==NULL) fin = fopen("motion.txt", "r");///NOW_FILE_READ (2) ///scanf("%d", &n); for(int i=0;i<20; i++){///NOW_FILE_READ fscanf(fin, "%f", &angle[i]);///NOW_FILE_READ printf(" %.2f ", angle[i]);///順便印出來看數字對不對 } } glutPostRedisplay();///NOW_FILE_READ 和 display()很像 } int main(int argc, char**argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); ///glutInitWindowSize(600,600);///可以開大一點的window glutCreateWindow("Week 13 angle motion file"); glutKeyboardFunc(keyboard);///NOW3 glutMouseFunc(mouse);///NOW2 glutMotionFunc(motion);///NOW2 glutDisplayFunc(display); glutMainLoop(); }



3.作業









-

沒有留言:

張貼留言