2022年5月31日 星期二

電腦圖學筆記week15

筆記 

Step1-1 PlaySound() 更詳細解說

    0. File-New-Empty File,存成 week15-1_PlaySound.cpp

    1. //#include <mmsystem.h> 上週教的

    2. #inlcude <windows.h> 本週改這

    3. //PlaySound("檔名wav", NULL , SND_ASYNC); //上週 不等待/不同步

    4. PlaySound ("檔名.wav", NULL , SND_SNYC); //本週、等待、同步

    5. 注意工作執行目錄 working_dir (in C:\ . . . . .)

#include <windows.h>

#include <stdio.h>

int main()

{

    printf("PlaySound()之前\n");

    PlaySound("badbad.wav", NULL, SND_SYNC);

    printf("PlaySound()之後\n");

}

但執行錯誤,因還沒有在settings->compiler加入winmm

https://sound-effects.bbcrewind.co.uk/search 尋找想要的wav檔

下載後移到執行資料夾

Step1-2 PlaySound()

    1.File-New-empty File再改檔名.cpp

    2. 寫入

        #include <windows.h>

        #include <stdio.h>

        int main(){

            PlaySound("do.wav",NULL,SND_SYNC);///ASYNC不等待

            PlaySound("re.wav",NULL,SND_SYNC);

            PlaySound("mi.wav",NULL,SND_SYNC);

        }

    3. wav檔移到執行資料夾    

    4. 記得寫成SYNC(寫ASYNC若不等待會出錯

        #include <windows.h>

        #include <stdio.h>

        int main(){

            PlaySound("NHU05082251.wav",NULL,SND_ASYNC);///不等待執行較快,適合互動

            while(1){

                printf("輸入數字: ");

                int N;

                scanf("%d",&N);

                if(N==1)PlaySound("do.wav",NULL,SND_SYNC);///ASYNC不等待

                if(N==2)PlaySound("re.wav",NULL,SND_SYNC);

                if(N==3)PlaySound("mi.wav",NULL,SND_SYNC);

                }

           }


Step2-1 WAV(大/原始) vs. MP3(小/有壓縮)

              PlaySound()只能用大/原始的WAV檔,只要1行


             MP3檔比較麻煩,很多行。

             Moodle可下載 CMP3_MCI.h

    0. File-New-Empty File,week15-3_mp3.cpp        

    1. 在Moodle 下載 CMP3_MCT.h放在同目錄

    2. 程式碼 #include "CMP3_MCT.h "

    3. 宣告 CMP3_MCI mp3;

    4. mp3.Load("檔名.mp3");

    5.  mp3.Play();

#include <stdio.h>

#include "CMP3_MCI.h"

CMP3_MCI mp3;

int main ()

{

    mp3.Load("07071034.wav");

    mp3.Play();

    printf("輸入數字程式卡住");

    int N;

    scanf("%d",&N);

}


Step2-2 接續上周的進度加強印象,將動畫相關的動作編輯進行改良。

              接續上周的week14_angles_TRT_write_and_read

    0. File-New-Project ,GLUT專案, week15_angles_TRT_again

    1. copy 上周的程式碼,改成 week15_angles並試跑: mouse motion, keyboard '0' '1' '2' '3' 換關           節,最後案 'r' 長按,可慢慢讀入資料

    2. 發現問題: 不像動畫,只是拉某一個關節(很慢)

    3. mrWrite() 會寫一行, myRead()會讀一行

    4. 不能把myWrite() 放 motion

    5. 把動作對應的關節全部調好後,才存動作

    6. 擺好動作時,按 's' 存動作

    7. 執行時,存幾個動作, 'r' 可讀入

    8. 事後在工作執行目錄 file.txt 可以大量copy 動作,重複,再重新跑程式

Step3-1 機器人擺動作

    1. 需要 3D Model(glm.h / glm.cpp) (.obj / .mtl / .jpg ...)

    2. 把模型切成很多塊(因整塊就無法擺動關節) 分別讀入

    3. TRT的程式,才能轉動

    4. keyboard() 切換關節, mouse motion() 轉動那一個關節

        (1) File-New-Project ,GLUT 專案,week15_hw_gundam_parts

        (2) 工作執行目錄 working_dir不太好,要改

        (3) 用 Notepad++把week15_hw_gundam_parts.cbp(CodeBlocks Project)改裡面的working_dir

        (4) 把glm.h、glm.cpp、gundam的data目錄,全部放在程式目錄

        (5) 在CodeBlocks左邊

沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

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