2021年4月28日 星期三

電腦圖學_09136054_week10

 今天雖然下雨,但一早就到教室。

今天主要是談音樂、音效的實作,後半段會談一些關於3D模型的練習或複習


這是第一堂課體驗語法的結果,一定要用wav檔


嘗試用音符拼湊

然後建立類似鋼琴的程式,後來才發現getchar()要enter送出才會吃到資料

#include <windows.h>
#include <stdio.h>
int main()
{
    ///播放聲音,音檔,空指標,不等待同步
    while(1){
        char c = getchar();
        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);
    }
}

所以老師直接帶glut專案的glut套件中的keyboard函式,使數字鍵直接送出

#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_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("test01_20210303");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}


最後加了MP3可以處裡的方法
並類似射擊遊戲,可以左右鍵

#include <windows.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);
    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) 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[])
{
    mp3.Load("music.mp3");
    mp3.Play();
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("test01_20210303");
    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...