1_用Console application專案執行mp3播放
先從FB社團裡下載CMP3_MCI.h檔
按下F9即可執行播放音樂
試著自己新增一個專案來播放mp3
File-New-Project...
選擇新增一個Console application專案
複製FB中老師給的程式碼步驟
直接貼上,並修改每行程式碼的位置
註:要記得將CMP3_MCI.h和mp3檔複製進新創的專案資料夾中
#include <iostream>
#include "CMP3_MCI.h" //放在同一個程式碼專案的目錄中
CMP3_MCI myMP3; //宣告一個變數
using namespace std;
int main()
{
myMP3.Load("yukai.mp3"); //讀入mp3,要放在同一個程式碼專案的目錄中
myMP3.Play(); //播放讀入的mp3檔
int n;
cin >> n; //要卡住,否則程式輸出結果,音樂就會停了
cout << "Hello world!" << endl;
return 0;
}
在專案名稱按下滑鼠右鍵,選擇Build options...
在Linker settings的Link libraries中加入winmm,這樣待會才能順利執行
按下F9(Build&Run) 即可播放出音樂
2_用GLUT專案執行mp3播放
新增一個GLUT專案:File-New-Project...
選擇GLUT project
記得要設定專案名稱及存放的路徑,以免找不到檔案
從FB社團中下載freeglut,並複製存放路徑
貼上剛剛複製的freeglut資料夾路徑
直接按下Finish即可
複製FB中老師給的程式碼步驟
直接貼上,並修改每行程式碼的位置
註:要記得將CMP3_MCI.h和mp3檔複製進新創的專案資料夾中
按下F9(Build&Run) 即可播放出音樂
3_執行Projection.exe
將windows.zip解壓縮,將data資料夾與glut32.dll拉進windows資料夾
開啟Projection.exe
調整gluLookAt的數值,並觀察攝影機的運鏡效果
4_gluLookAt攝影機運鏡
使用老師傳送的檔案
開啟專案檔
控制攝影機運鏡
gluLookAt(eyeX,eyeY,eyeZ,centerX,centerY,centerZ,upX,upY,upZ);
float eyeX=0, eyeY=0, eyeZ=1;
float centerX=0, centerY=0, centerZ=0;
float upX=0, upY=1, upZ=0;
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
//攝影機運鏡的設定
glPushMatrix();
gluLookAt(eyeX, eyeY, eyeZ,
centerX, centerY, centerZ,
upX, upY, upZ);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
/* Program entry point */
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
///glutReshapeFunc(resize);
glutDisplayFunc(display);
///glutKeyboardFunc(key);
///glutIdleFunc(idle);
glClearColor(1,1,1,1);
///glEnable(GL_CULL_FACE);
///glCullFace(GL_BACK);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
glutMainLoop();
return EXIT_SUCCESS;
}
按下F9執行,結果如下:
5_gluPerspective投影矩陣
使用老師傳送的檔案
投影矩陣之範例
glMatrixMode(GL_PROJECTION);
glLoadIdentity();gluPerspective(60, 1, 0.001, 10000);
glMatrixMode(GL_MODELVIEW);
#include <GL/glut.h>
#include <math.h>float eyeX=0, eyeY=0, eyeZ=1;
float centerX=0, centerY=0, centerZ=0;
float upX=0, upY=1, upZ=0;
float angle=0;
static void display(void)
{
//投影矩陣的設定
glMatrixMode(GL_PROJECTION); //臨時切換成投影Projection矩陣來調整
glLoadIdentity();
gluPerspective(60, 1, 0.001, 10000); //gluPerspective(fovy, aspect, zNear, zFar);
//fov: field of view 視野的張角(y方向) , aspect: xy的比例
glMatrixMode(GL_MODELVIEW); //馬上切換回去Model View矩陣
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
angle+=0.01;
eyeX=cos(angle); eyeZ=2*sin(angle);//攝影機運鏡
glPushMatrix();
gluLookAt(eyeX, eyeY, eyeZ,
centerX, centerY, centerZ,
upX, upY, upZ);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
/* Program entry point */
int main(int argc, char *argv[])
{glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutIdleFunc(display);
glClearColor(1,1,1,1);
///glCullFace(GL_BACK);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
glutMainLoop();
return EXIT_SUCCESS;
}按下F9執行,結果如下:
6_TRT 會動的機器人
使用老師傳送的檔案
T-R-T設定之範例
glTranslatef(-x,-y,-z);
glRotatef(angle,0,0,1);
glTranslatef(x,y,z);
#include <GL/glut.h>
#include <math.h>float eyeX=0, eyeY=0, eyeZ=2;
float centerX=0, centerY=0, centerZ=0;
float upX=0, upY=1, upZ=0;
float angle=0, dir=1;
static void display(void)
{
glMatrixMode(GL_PROJECTION); //臨時切換成投影Projection矩陣來調整
glLoadIdentity();
gluPerspective(60, 1, 0.001, 10000); //gluPerspective(fovy, aspect, zNear, zFar);
//fov: field of view 視野的張角(y方向)
//aspect: xy的比例
glMatrixMode(GL_MODELVIEW); //馬上切換回去Model View矩陣
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
angle+=dir;
if(angle>60)dir = -dir; //設定手揮動的範圍值if(angle<0) dir = -dir;
glPushMatrix();
//攝影機運鏡
gluLookAt(eyeX, eyeY, eyeZ,centerX, centerY, centerZ,
upX, upY, upZ);
glutSolidTeapot(0.3); //head
glPushMatrix();
glTranslatef(0, -0.3, 0);
glColor3f(1,1,1); glutSolidTeapot(0.3); //body
glPushMatrix();
glTranslatef(0.3, 0,0); //TglRotatef(angle, 0,0,1); //R
glTranslatef(0.3, 0,0); //T
glutSolidTeapot(0.3); //right upper arm
glPushMatrix();
glTranslatef(0.3, 0,0); //T
glRotatef(angle, 0,0,1); //R
glTranslatef(0.3, 0,0); //T
glutSolidTeapot(0.3); //right lower arm
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.3, 0,0); //TglRotatef(-angle, 0,0,1); //R
glTranslatef(-0.3, 0,0); //T
glutSolidTeapot(0.3); //left upper arm
glPushMatrix();
glTranslatef(-0.3, 0,0); //T
glRotatef(-angle, 0,0,1); //R
glTranslatef(-0.3, 0,0); //T
glutSolidTeapot(0.3); //left lower arm
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
/* Program entry point */
int main(int argc, char *argv[])
{glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
///glutReshapeFunc(resize);
glutDisplayFunc(display);///glutKeyboardFunc(key);
///glutIdleFunc(idle);
glutIdleFunc(display);
glClearColor(1,1,1,1);
///glCullFace(GL_BACK);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
glutMainLoop();
return EXIT_SUCCESS;
}按下F9執行,結果如下:
沒有留言:
張貼留言