2022年5月24日 星期二

尖🦉-圖學筆記 Week14

 ◇寫檔(File output):

   1.先開一個empty 檔,存成.cpp檔。

    2.fopen()開啟檔案(可產生一個檔案)、fprintf() 寫入檔案、fclose()關閉檔案

        FILE * fout = fopen("檔名","模式"); FILE記得要大寫。

        按齒輪會產生兩個檔案,當你按齒輪+執行會出現fopen裡寫的檔。

讀檔(File Intput):

   1.先開一個empty 檔,存成.cpp檔。

    2.FILE * fin = fopen("file.txt","r");//////打開檔案,讀入file.txt指到fin。

       fscanf(fin,"%f",&angle);///讀到"檔名"檔案的浮點數,後面記得要&讀入。

 ◇利用上週程式week13_moreTRT,用寫檔:

   1.開新專案,複製上周的程式。

    2.先include <stdio.h>。

    3.創建一個FILE * fout =NULL;,並寫mywrite()函式。

    4.再motion函式裡,呼叫mywirte()在motion裡打mywirte()

        當我們轉動圖形角度,角度就會在小黑印出來。

    5.最後加上printf("\n");  fprintf(fout ,"\n"); 讓我們好讀。

 利用寫檔程式,加入讀檔進而產生動畫:

   1.再開一個檔案,複製寫檔的程式。

    2.設定好fin ,並寫入myRead()函式。

       FILE * fout =NULL, * fin =NULL; 把讀檔的檔案也設好。

         if(fout !=NULL ){ fclose(fout); fout = NULL; } 當我們按下r時,fout不是空的就關掉他並清除

         glutPostRedisplay();///重畫畫面,才會有效果。

    3.在keyboard函式寫進

        if (key == 'r') myRead(); ///當按著r就會動,長按。

        ☆當我們移動好圖形的動作後,長按r,他就會一直讀取我們剛剛寫入的angle值,之後myRead()會讀入,產生動作的效果。

◇更改工作目錄到專案:

   因原本的目錄在freeglut\bin,但我們希望產生的東西都放在專案裡頭。

    1.到我們專案的資料夾,將.cdp檔用notepad++打開

    2.working_dir的位置改成 . ,存檔回到Codeblocks。

        codeblocks會問你要不要重新執行,請按確認。

    3.此時執行時,會出問題,所以要將freeglut\bin 資料夾裡的freeglut.dll,複製到專案資料夾裡。

    複製好後就能執行:)

◇計時器 glutTimeFunc()

    因為keyboard會由延遲,動畫會不順

   1.開啟新GLUT專案。

    2.寫程式:

        glutTimerFunc(等多久時間, timer ,t參數)

    ◆自動呼叫timer,簡化程式:

    1.在 timer函式裡呼叫自己。

        因為Main函式有glutTimerFunc(5000,timer, 0); 他會等五秒後再呼叫timer函式。

        之後函式裡面就會自己呼叫自己並顯示出來了。

◇播放聲音:

   1.利用 PlaySound() 先下載do.wav音檔

    2.先加#include <mmsystem.h> 

    3.在timer函式加PlaySound("do.wav", NULL , SND_ASYNC); 撥放do.wav聲音。

沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...