Step01-1
- 在codeblocks建立一個新的Empty file,再建立一個week14-1_fprintf裡面放week14-1.cpp

- 讀入(fopen開啟檔案、fprintf寫檔、fclose關檔)

#include <stdio.h>
int main()
{
FILE * fout = fopen("file.txt", "w+");
printf("Hello World\n"); ///小黑印出來
fprintf(fout,"Hello World\n"); ///檔案印出來
fclose(fout);
}
- 讀入+印出(跟上一步一樣,先建立一個week14-1_fprintf_fscanf裡面放week14-2.cpp)
#include <stdio.h>
int main()
{
FILE * fout = fopen("file.txt", "w+");
fprintf(fout,"3.1515926");
fclose(fout);
float angle=0;
FILE * fin = fopen("file.txt", "r");
fscanf(fin,"%f", &angle);
printf("讀到了角度%f",angle);
fclose(fin);
}
Step01-2
將week13_rect_many_TRT拿來修改
- 新增一個新的glut專案 week14_angle_fprintf
FILE * fout = NULL;
void myWrite(){
if(fout == NULL) fout = fopen("file.txt", "w+");
for(int i=0 ; i<20 ; i++){
printf("%.1f", angle[i]);
fprintf(fout, "%.1f",angle[i]);
}
}
Step02-1
開始做動畫!
- 建立一個新glut專案 week14_angles_fprintf_fscanf
- 新增下面的程式碼讓手臂轉起來然後按住'r'可以讓手臂照著之前的軌跡自動旋轉
void myWrite(){
if(fout == NULL) fout = fopen("file.txt", "w+");
for(int i=0 ; i<20 ; i++){
printf(" %.1f ", angle[i]); /////"%.1f前後要空格不然數字會擠再一起"
fprintf(fout, " %.1f ",angle[i]); /////"%.1f前後要空格不然數字會擠再一起"
}
printf("\n"); ////跳行,讓數字不要擠在一起
fprintf(fout,"\n"); ////跳行,讓數字不要擠在一起
}
void myread(){
if(fout != NULL){ fclose(fout); fout=NULL; }
if(fin == NULL) fin = fopen("file.txt", "r");
for(int i=0 ; i<20 ; i++){
fscanf(fin, "%f",&angle[i]);
}
glutPostRedisplay();
}
- 在keyboard這個函式內新增 if(key=='r') myread(); 這樣按'r'手臂才會自動旋轉

Step02-2
了解為甚麼有時候檔案file.txt會放在奇怪的地方
ans: 因為glut專案需要freeglut.dll所以會被放到freeglut\bin裡面
解決辦法:
1.將專案中的.cbp檔案打開然後把紅色框框""中的路徑改成"."

2.執行這個專案,但發現freeglut.dll出問題了
3.把freeglut\bin裡面的freeglut.dll這個檔案複製到現在執行的專案的資料夾內
4.成功!
Step03-1
glutTimerFunc() 計時器
- 開新GLUT專案 week14_timer
- void timer (int t) 寫timer
- glutTimerFunc( 等多久 , timer , t參數 );
#include <stdio.h>
#include <GL/glut.h>
void timer (int t){
printf("起床,現在時間: %d\n",t);
}
void display(){
}
int main (int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutTimerFunc(2000, timer, 1);
glutTimerFunc(3000, timer, 2);
glutTimerFunc(4000, timer, 3);
glutTimerFunc(5000, timer, 4);
glutTimerFunc(6000, timer, 5);
glutDisplayFunc(display);
glutMainLoop();
}

Step03-2
期末作品30秒,每秒30格,900個timer,太多了,所以程式應 該自動化,利用函式呼叫函式
- 建立新GLUT專案week14_timer_one_by_one
- 設定過五秒後第0個t
#include <stdio.h>
#include <GL/glut.h>
void timer (int t){
printf("起床,現在時間: %d\n",t);
glutTimerFunc(1000,timer, t+1);
}
void display(){
}
int main (int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14 timer"); ////glutTimerFunc( 等多久 , timer , t參數 );
glutTimerFunc(5000, timer, 0);
glutDisplayFunc(display);
glutMainLoop();
}
Step03-3
播放聲音








沒有留言:
張貼留言