2019年5月17日 星期五

alanhc/張牧之 電腦圖學-week13

寫檔

1. 新增指標 fout FILE * fout=NULL;
2. 指定指標 fopen("檔名", 方式)  方式是 "w+"
3. 印到檔案 fprintf(指標, "要寫的東西")

1. File * fout=NULL
2. fout = fopen("filename.txt", "w+");
3. fprintf(fout, "hello world");

讀檔

1. 新增指標 fin FILE * fin =NULL;
2. 指定指標 fopen("檔名", 方式)  方式是 "r"
3. 讀檔案 fscanf(指標, "%s", line);
1. File * fin=NULL
2. fin = fopen("filename.txt", "r");
3. fscanf(fin, "hello world");

控制獨立關節轉動

1. main() 宣告
glutKeyboardFunc(keyboard);

2. 程式撰寫
> 使用一個 變數 angleID
使 motion() 裡,陣列 angle[angleID] 
可以控制 display() 裡的 angle[]
void motion(int x, int y)
{
angle[angleID] += (x-oldX);
oldX = x;
display();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='1') angleID=1;
if(key=='2') angleID=2;
if(key=='3') angleID=3;
if(key=='4') angleID=4;
}
圖示



紀錄/播放動作

紀錄

講解

> 使用寫檔 (參見前一章)
> 按下w開始 記錄(write)
> fprintf( 指標, "要印的東西" ) 

keyboard() 裡,加入以下程式
if (key=='w') {
if (fout==NULL) fout=fopen("motion.txt", "w+");
for (int i=0; i<5; i++) {
printf( "%.1f ", angle[i] );
fprintf( fout, "%.1f ", angle[i]);
}
printf("\n");
fprintf(fout, "\n");
}

if (fout==NULL) 檢查是否有開檔

for () 一次寫5個關節

在motion()裡面也加
if(fin==NULL) fin = fopen("motion.txt", "r");
for(int i=0; i<20;i++){
fscanf(fin, "%f", &angle[i]);
}
printf("\n");
fprintf(fout, "\n");


在freeglut\bin資料夾底下找 motion.txt 就可以找到剛剛紀錄的座標

播放

講解

> 使用讀檔 (參見前一章)
> 按下r開始 記錄(write)
> fscanf( 指標, "要讀的東西" ) 

if(key=='r'){
if(fin==NULL) fin = fopen("motion.txt", "r");
for(int i=0; i<20;i++){
fscanf(fin, "%f", &angle[i]);
}
}
glutPostRedisplay();

*glutPostRedisplay(); 加上這 就會重新畫,否則只有按下鍵盤才畫
終於大功告成拉拉拉拉拉拉拉拉拉哈哈哈哈哈哈哈哈哈哈哈哈哈!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


小葉閒聊time 

規劃的重要性

unitize 轉成單位

分開存,才能分開畫




沒有留言:

張貼留言