建立一個新的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();
}
寫上程式碼,並且執行,過了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();
}










沒有留言:
張貼留言