2018年5月18日 星期五

Week 12 宋侑恩

Week 12 - Part 1 - 利用上周的PlaySound播放mp3檔

建立一個新的GLUT專案




加上MP3的外掛程式碼: #include "CMP3_MCI.h" ,執行過後發現找不到外掛




到moodle下載老師給的 CMP3_MCI.h 檔





將剛剛下載的外掛檔,複製到今天的專案資料夾中



接著把MP3的程式碼打上

#include "CMP3_MCI.h" /// MP3的外掛
CMP3_MCI myMP3; ///宣告(物件)變數

int main(int argc, char *argv[])
{
    myMP3.Load("face.mp3"); ///讀入檔案
    myMP3.Play(); ///播放
    ......
    ......
    ......
}


接著將下載的mp3檔放到執行目錄裡(C:\Users\N\Desktop\CCE\2下\電腦圖學\freeglut\bin)


接著在執行程式碼,就可以播放MP3檔案了


Week 12 - Part 2 - timer 計時器

寫上timer計時器的韓式,並在Createwindows後面加上呼叫函式的程式碼

#include <windows.h>
#include <mmsystem.h>
void timer(int t)
{
    glutTimerFunc(1000,timer,t+1); ///等1秒,呼叫timer,參數
    PlaySound("Do.wav",NULL,SND_ASYNC);
}
int main(int argc, char *argv[])
{
    ///myMP3.Load("face.mp3");///讀入檔案
    ///myMP3.Play();///播放

    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT Sound");

    glutTimerFunc(5000,timer,0); ///計時器函式
    ......
    ......
    ......
}

程式先執行5秒後,會聽到Do的聲音,並且每隔一秒會重新播放,
因為在函式裡又再呼叫了timer函式

若把函式裡面的glutTimerFunc註解掉,等程式執行5秒後,開始播放音檔
但音檔只會播放一次(這裡我改用播放MP3來執行)

#include "CMP3_MCI.h"
CMP3_MCI myMP3;
void timer(int t)
{
    ///glutTimerFunc(1000,timer,t+1);///等1秒,呼叫timer,參數
    myMP3.Load("face.mp3");
    myMP3.Play();
}
int main(int argc, char *argv[])
{
    ///myMP3.Load("face.mp3");///讀入檔案
    ///myMP3.Play();///播放

    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT MP3");

    glutTimerFunc(5000,timer,0);///計時器函式
    ......
    ......
    ......
}



Week 12 - Part 3 - 利用內插法讓茶壺自動旋轉

寫上程式碼,並且執行,過了6秒過後,茶壺就會自動旋轉。

#include <GL/glut.h>
#include <stdio.h>
float angle=0,oldAngle=0,newAngle=90;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,0,1);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
void timer(int t)
{
    glutTimerFunc(1000,timer,t+1);
    float alpha = (t)/30.0;
    angle = newAngle * alpha + oldAngle*(1-alpha); ///角度內插
    glutPostRedisplay();///照著上面的角度重畫
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT MP3");
    glutTimerFunc(5000,timer,0);
    glutDisplayFunc(display);
    glutMainLoop();

}





沒有留言:

張貼留言