2022年5月31日 星期二

AhFatKr的電腦圖學筆記week15

 # week15

PlaySound()更詳細解說

1. 播聲音、播MP3
2. 播放動畫、內插
3. 機器人擺動作、跳舞
```
## Step01-1 PlaySound()解釋
```C
0.File-New-Empty File-week15_playsound.cpp
1.上週#include<mmsystem.h>
2.這週使用#include<windows.h>
3.上週playsound("檔名.wav",NULL,SND_ASYNC);//不等待,不同步
4.這週PlaySound("檔名.wav",NULL,SND_SYNC);//等待,同步
5.setting-compiler setting-linker加入winmm(可以撥聲音)
6.注意工作目錄的位置,將下載下來的聲音檔放在自己檔案存放的位置(記得音樂檔是wav檔)

##Step01-2 PlaySound()更多參數
```C
    File-New-Empty File-week15-2_SND_SYNC_SND_ASYNC
    PlaySound("檔名.wav",NULL,SND_SYNC);=>加上變ASYNC就會不播音樂直接結束
```放在你檔案存放的位置(記得音樂檔是wav檔)

做一些變更
```C
#include <windows.h>
#include <stdio.h>
int main()
{///不等待會快速執行下一行,互動性佳
    PlaySound("07013033.wav",NULL,SND_ASYNC);///背景會先撥放此段音樂
    while(1){
        printf("請輸入數字: ");///邊秀出文字
        int n;
        scanf("%d",&n);
        if(n==1)PlaySound("do.wav",NULL,SND_ASYNC);///ASYNC不等待
        if(n==2)PlaySound("re.wav",NULL,SND_ASYNC);
        if(n==3)PlaySound("mi.wav",NULL,SND_ASYNC);
    }
}

```
## Step02-1 MP3(小/有壓縮) vs WAV(大/原始檔)
>>PlaySound()只能撥最原始的檔案,只要一行
>>MP3比較麻煩,需要打比較多行
SND_ASYNC 不等待會比較快執行到下一行,互動性會比較好
```
#include <windows.h>
#include <stdio.h>
int main()
{

    PlaySound("07071034.wav", NULL, SND_ASYNC);
    while(1){
        printf("請輸入數字:");
        int N;
        scanf("%d",&N);
        if(N==1) PlaySound("do.wav", NULL, SND_ASYNC);
        if(N==2) PlaySound("re.wav", NULL, SND_ASYNC);
        if(N==3) PlaySound("mi.wav", NULL, SND_ASYNC);
    }
}
```
只能播wav檔不能播mp3檔,因為mp3檔被壓縮過,wav檔沒被壓縮過,所以執行程式碼時,如果把壓縮過的mp3檔讓音效卡讀取時就會無法讀取,所以只能用原始大小的wav檔會比較好

##step02-2
今天主要是接續上周的進度,要將動畫相關的動作進行改良。
0. File-New-Project, GLUT專案,week15_angles_TRT_again
1. copy 上周的程式碼,改成 week15並試跑:按'0' '1' '2' '3'換關節,最後按'r'長按,就可慢慢讀入資料
2.發現問題:沒有動畫的樣子!只是拉關節太僵硬了
3.myWrite()會寫一行,myRead()會讀一行
4.不能把myWrite()放motion()
5.把動作對應的關節全部調好後,才存(一行)動作
6.所以在擺動作時,擺好後按's' 存動作
7.執行時,存幾個動作,'r' 可讀入
8.事後在工作執行目錄 file.txt 可以大量copy動作,重複,再重跑程式,動作就可以多起來了

## step03-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.cbp
2.工作執行目錄 working_dir不太好_要改到現在程式的目錄
3.使用NotePad++ 把week15_hw_gundam_parts.cbp 改裡面的working_dir
4.將freeglut.dll複製貼上到程式所在的檔案夾
4.把glm.h glm.cpp和gundam的data目錄,全放在現在要用的檔案目錄

hw4

沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

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