2021年4月28日 星期三

小乖的圖學筆記 week10

 上一周期中考啦哈哈

------------------------------------------------------------------------------------------

這周教添加音樂

0.資料夾裡先放這些檔案

0-1 路徑C:\Users\Administrator\Desktop\freeglut\bin

0-2路徑C:\Users\Administrator\Desktop\week10-1 (專案資料夾裡)


1.開啟GLUT專案

2.添加程式碼PlaySound("檔案名稱.wav(ˇ只能使用wav檔)",空指標,執行模式);

#include <windows.h>
#include <stdio.h>
int main()
{
    PlaySound("2020-12-1-14-59-3-165-nf1.wav",NULL,SND_SYNC);
}

這樣可以自動播放 2020-12-1-14-59-3-165-nf1.wav


3.添加程式碼

#include <windows.h>
#include <stdio.h>
int main()
{
    PlaySound("do.wav",NULL,SND_ASYNC);
    PlaySound("re.wav",NULL,SND_ASYNC);
    PlaySound("mi.wav",NULL,SND_ASYNC);
    PlaySound("fa.wav",NULL,SND_ASYNC);
    PlaySound("so.wav",NULL,SND_ASYNC);

}

這樣會依序播放do,re,mi.,fa,so但整個程式執行會很冗長


4.修改程式碼為以下

    while(1){
        char c=getchar();
        if(c=='z')PlaySound("do.wav",NULL,SND_ASYNC);
        if(c=='x')PlaySound("re.wav",NULL,SND_ASYNC);
        if(c=='c')PlaySound("mi.wav",NULL,SND_ASYNC);
        if(c=='v')PlaySound("fa.wav",NULL,SND_ASYNC);
        if(c=='b')PlaySound("so.wav",NULL,SND_ASYNC);
    }

這樣會按下按鍵後Enter播放對應音檔,並且後按的會蓋過前面的


俗稱鋼琴

5.修改程式碼為以下

#include <windows.h>
#include <stdio.h>
#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSwapBuffers();
}
void keyboard(unsigned char c,int x,int y)
{
    if(c=='z') PlaySound("do.wav",NULL,SND_ASYNC);
    if(c=='x') PlaySound("re.wav",NULL,SND_ASYNC);
    if(c=='c') PlaySound("mi.wav",NULL,SND_ASYNC);
    if(c=='v') PlaySound("fa.wav",NULL,SND_ASYNC);
    if(c=='b') PlaySound("so.wav",NULL,SND_ASYNC);

}
int main(int argc,char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("小乖的鋼琴");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}

這樣就解決每次都要Enter才會播放的問題,變成按下按鍵就會自動播放


6.修改程式碼為以下

#include <windows.h>
#include <stdio.h>
#include <GL/glut.h>
#include "CMP3_MCI.h"
CMP3_MCI mp3;

void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSwapBuffers();
}
void keyboard(unsigned char c,int x,int y)
{
    if(c=='z') PlaySound("do.wav",NULL,SND_ASYNC);
    if(c=='x') PlaySound("re.wav",NULL,SND_ASYNC);
    if(c=='c') PlaySound("mi.wav",NULL,SND_ASYNC);
    if(c=='v') PlaySound("fa.wav",NULL,SND_ASYNC);
    if(c=='b') PlaySound("so.wav",NULL,SND_ASYNC);
}
int main(int argc,char** argv)
{
    mp3.Load("music.mp3");
    mp3.Play();

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("小乖的鋼琴");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}

這樣就能在有背景音樂的狀態下彈鋼琴


7.修改程式碼為以下

#include <windows.h>
#include <stdio.h>
#include <GL/glut.h>
#include "CMP3_MCI.h"
CMP3_MCI mp3;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSwapBuffers();
}
void keyboard(unsigned char c,int x,int y)
{
    if(c=='z') PlaySound("do.wav",NULL,SND_ASYNC);
    if(c=='x') PlaySound("re.wav",NULL,SND_ASYNC);
    if(c=='c') PlaySound("mi.wav",NULL,SND_ASYNC);
    if(c=='v') PlaySound("fa.wav",NULL,SND_ASYNC);
    if(c=='b') PlaySound("so.wav",NULL,SND_ASYNC);
}
void Mouse(int button,int state,int x,int y)
{
    if(state==GLUT_DOWN)PlaySound("shot.wav",NULL,SND_ASYNC);
}

int main(int argc,char** argv)
{
    mp3.Load("music.mp3");
    mp3.Play();
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("小乖的鋼琴");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(Mouse);
    glutMainLoop();
}

這樣就能在有背景音樂的狀態下邊彈鋼琴邊射擊


8.修改程式碼為以下

#include <windows.h>
#include <stdio.h>
#include <GL/glut.h>
#include "CMP3_MCI.h"
CMP3_MCI mp3;
CMP3_MCI shot1,shot2,shot3;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSwapBuffers();
}
void keyboard(unsigned char c,int x,int y)
{
    if(c=='z') PlaySound("do.wav",NULL,SND_ASYNC);
    if(c=='x') PlaySound("re.wav",NULL,SND_ASYNC);
    if(c=='c') PlaySound("mi.wav",NULL,SND_ASYNC);
    if(c=='v') PlaySound("fa.wav",NULL,SND_ASYNC);
    if(c=='b') PlaySound("so.wav",NULL,SND_ASYNC);
}
void Mouse(int button,int state,int x,int y)
{
    if(state==GLUT_DOWN&&button==GLUT_LEFT_BUTTON)shot1.Play();
    if(state==GLUT_DOWN&&button==GLUT_MIDDLE_BUTTON)shot2.Play();
    if(state==GLUT_DOWN&&button==GLUT_RIGHT_BUTTON)shot3.Play();

}
int main(int argc,char** argv)
{
    shot1.Load("1.mp3");shot2.Load("2.mp3");shot3.Load("3.mp3");
    mp3.Load("music.mp3");
    mp3.Play();
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("小乖的鋼琴");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(Mouse);
    glutMainLoop();
}

這樣就能在有背景音樂的狀態下邊彈鋼琴邊用三種武器射擊

沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...