2018年6月30日 星期六

Week12 聲音、計時器、線性內插

(1)播放MP3檔(需外掛程式)
1.先從moodle下載CMP3_MCI.h



2.將剛剛下載好的CMP3_MCI.h複製到專案的資料夾內



3.將MP3檔放置 freeglut|bin



4.打上撥放MP3的程式碼


程式碼:
#include "CMP3_MCI.h" /// MP3 的外掛
CMP3_MCI mymp3; ///宣告(物件)變數
int main(int argc, char *argv[])
{
   
    ///PlaySound("Do.wav",NULL,SND_ASYNC | SND_LOOP);
    mymp3.Load("Play With Fire.mp3"); ///讀MP3
    mymp3.Play();/// 播放
}


(2)Timer計時器(用剛剛的專案)
1.在glutCreateWindow("   "); 後,打上glutTimeFunc(1000,timer,0) [glutTimeFunc((幾毫秒),(呼叫函式),(參數))]



2.打上timer的程式內容,就完成


程式碼:
void timer(int t)
{
    glutTimerFunc(1000,timer,t+1); ///等多久、呼叫誰、參數
    PlaySound("Play With Fire.mp3",NULL,SND_ASYNC);
}
#include "CMP3_MCI.h" /// MP3 的外掛
CMP3_MCI mymp3; ///宣告(物件)變數
int main(int argc, char *argv[])
{
   
    ///PlaySound("Do.wav",NULL,SND_ASYNC | SND_LOOP);
    ///mymp3.Load("Play With Fire.mp3"); ///讀MP3

    ///mymp3.Play();/// 播放
   
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("QWQ");
   
    glutTimerFunc(1000,timer,0);

}

(3)線性內插
1.用剛剛的專案在修改與新增一些程式碼(主要是角度angle、oldangle、newangle)


程式碼:
#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;/// 算出一個內插的alpha值
    angle = newAngle*alpha+oldAngle*(1-alpha);///角度去內插
    glutPostRedisplay();///照著上面的角度重畫
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("QWQ");
    glutTimerFunc(0,timer,0);///有個計時器 timer
    glutDisplayFunc(display);
    glutMainLoop();
}


沒有留言:

張貼留言