2021年4月28日 星期三

week10電腦圖學

 1.打開新的GLUT專案



2.將wav檔的音樂檔案放進freeglut裡的bin資料夾裡


3.播放音樂

程式碼:

#include <windows.h>
int main()
{
    PlaySound("music.wav",NULL,SND_SYNC);
///播放聲音("檔名.wav",空指標,要等待同步);
}

4.連續播放五個音調

程式碼:

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



5.按按鍵發出聲音(須按enter鍵)
程式碼:
#include <windows.h>
#include <stdio.h>
int main()
{
    while(1){
        char c=getchar();///getchar需要按enter才會送到左邊的c
        if(c=='1')PlaySound("do.wav",NULL,SND_ASYNC);
        if(c=='2')PlaySound("re.wav",NULL,SND_ASYNC);
        if(c=='3')PlaySound("mi.wav",NULL,SND_ASYNC);
        if(c=='4')PlaySound("fa.wav",NULL,SND_ASYNC);
        if(c=='5')PlaySound("so.wav",NULL,SND_ASYNC);
    }
}


6.按按鍵發出聲音(不須按enter鍵)
程式碼:
#include <windows.h>
#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')PlaySound("do.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("re.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("mi.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("fa.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySound("so.wav",NULL,SND_ASYNC);
}
int main(int argc,char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week10 Sound");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}



7.背景播放mp3檔案的音樂 同時按按鍵發出聲音(不需按enter)
程式碼:
#include <windows.h>
#include <GL/glut.h>
#include "CMP3_MCI.h"///須放在 專案目錄  week10裡
CMP3_MCI mp3;///宣告一個變數
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')PlaySound("do.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("re.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("mi.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("fa.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySound("so.wav",NULL,SND_ASYNC);
}
int main(int argc,char** argv)
{
    mp3.Load("music.mp3");///檔案須放在 執行目錄 ...freeglut\bin
    mp3.Play();///播放
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week10 Sound");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}



8.背景播放mp3檔案的音樂 同時按按鍵發出聲音(不需按enter)也可以按滑鼠發出槍聲
程式碼:
#include <windows.h>
#include <GL/glut.h>
#include "CMP3_MCI.h"
CMP3_MCI mp3;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')PlaySound("do.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("re.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("mi.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("fa.wav",NULL,SND_ASYNC);
    if(key=='5')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("Week10 Sound");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);///滑鼠函式
    glutMainLoop();
}
 


9.背景播放mp3檔案的音樂 同時按按鍵發出聲音(不需按enter)也可以按滑鼠發出槍聲(3種槍聲)
程式碼:
#include <windows.h>
#include <GL/glut.h>
#include "CMP3_MCI.h"
CMP3_MCI mp3;
CMP3_MCI shot1,shot2,shot3;///宣告3種槍聲
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')PlaySound("do.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("re.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("mi.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("fa.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySound("so.wav",NULL,SND_ASYNC);
}
void mouse(int button,int state,int x,int y)
{
    if(state==GLUT_DOWN&&button==GLUT_LEFT_BUTTON)PlaySound("1.wav",NULL,SND_ASYNC);///滑鼠左鍵
    if(state==GLUT_DOWN&&button==GLUT_MIDDLE_BUTTON)PlaySound("2.wav",NULL,SND_ASYNC);///滑鼠中鍵
    if(state==GLUT_DOWN&&button==GLUT_RIGHT_BUTTON)PlaySound("3.wav",NULL,SND_ASYNC);///滑鼠右鍵
}
int main(int argc,char** argv)
{
    mp3.Load("music.mp3");
    shot1.Load("1.wav");shot2.Load("2.wav");shot3.Load("3.wav");
    mp3.Play();
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week10 Sound");
    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...