播聲音、mp3檔
1.勇另一種的寫法再試一次,先放一個不存在的音檔,然後去Setting裡的Compiler內設定Linker setting 加入 winmmm
程式碼如下:
```c
#include <windows.h>
int main()
{
PlaySound("badbadbad.wav",NULL,SND_SYNC); ///上週教SND_ASYNC
}///Compile成功 但link失敗
```
2.加入音樂檔(看下面Build log裡面有寫音樂要放在哪裡)程式碼如下:
```c
#include <windows.h>
int main()
{
///PlaySound("badbadbad.wav",NULL,SND_SYNC);
PlaySound("07042111.wav",NULL,SND_SYNC);
}
```
3.播音樂前顯示文字,結束後顯示文字,最後在輸入數字已結束
程式碼如下:
```c
#include <windows.h>
#include <stdio.h>
int main()
{
printf("現在在PlaySound()前\n");
PlaySound("07042111.wav",NULL,SND_SYNC);
printf("現在在PlaySound()後\n");
int N;
scanf("%d",&N); ///等你輸入數字
}
```
///mp3檔案小 vs. wav檔案大 PlaySound()
程式碼如下:
```c
#include "CMP3_MCI.h"///下載放到同目錄
#include <stdio.h>
CMP3_MCI mp3;
int main()
{
mp3.Load("07042111.mp3");
mp3.Play();
printf("現在正在播放羊聲音\n");
int N; ///找一個人卡住,不要結束
scanf("%d",&N);
}
1.File-New-Project,Glut 專案,將上週Week14-angle_TRT_write_and_read程式碼放入
目標:每擺出一個動作就按's'存一次檔案,這樣就不會每動一次關節就存一次檔,導致黑框很亂
程式碼如下:
修改keyboard()函式內程式碼
if(key=='r')myRead();
if(key=='s')myWrite();///save
修改motion函式內程式碼
把myWrite(); 註解掉
機器人擺動作、跳舞
2-1:freeglut.dll、glm.cpp、glm.h加到你程式的工作目錄裡
2-2:左邊的專案,右鍵add把glm.cpp加進去
2-3:程式碼加進去,display函式開頭也必須加入
```c
#include "glm.h"
GLMmodel*pmodel=NULL;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if(pmodel==NULL)
{
pmodel = glmReadOBJ("data/Gundam.obj");
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel,90);
}
glmDraw(pmodel,GLM_SMOOTH);
glutSwapBuffers();
}
```
2-4:小心!working_dir " "裡要改成".",從專案裡的cbp檔用notepad++打開
前置作業:先將gundam裡面所有的obj檔、mtl檔放到專案中,可創一個data資料夾來存放,接著再丟入glm.cpp、glm.h、freeglut.dll,然後將cbp檔用notepad++打開,更改working _dir=".",Add files glm.cpp
程式碼如下:
```c
#include <GL/glut.h>
#include <stdio.h>
#include "glm.h"
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 };
GLMmodel * head = NULL;
GLMmodel * body = NULL;
GLMmodel * arm1 = NULL;
GLMmodel * hand1 = NULL;
GLMmodel * knee1 = NULL;
GLMmodel * foot1 = NULL;
GLMmodel * arm2 = NULL;
GLMmodel * hand2 = NULL;
GLMmodel * knee2 = NULL;
GLMmodel * foot2 = NULL;
GLMmodel * myReadOne(char * filename)
{
GLMmodel * one = NULL;
one=glmReadOBJ(filename);
glmUnitize(one);
glmFacetNormals(one);
glmVertexNormals(one,90);
return one;
}
float dx=0,dy=0,dz=0,oldX=0,oldY=0;
void mouse(int button,int state,int x,int y)///mouse按下去
{
oldX=x; oldY=y;
}
float angle[20]={};
int angleID=0;
void motion(int x,int y)
{
dx+=(x-oldX)/250.0; dy-=(y-oldY)/250.0;
angle[angleID]+=(x-oldX);
oldX=x; oldY=y;
printf("glTranslatef(%.2f,%.2f,%.2f);\n",dx,dy,dz);
glutPostRedisplay();
}
void keyboard(unsigned char key,int x,int y)
{
if(key=='0')angleID=0;
if(key=='1')angleID=1;
if(key=='2')angleID=2;
if(key=='3')angleID=3;
if(key=='4')angleID=4;
if(key=='5')angleID=5;
if(key=='6')angleID=6;
if(key=='7')angleID=7;
if(key=='8')angleID=8;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1,0,0);
glutSolidTeapot(0.05);
glColor3f(1,1,1);
glmDraw(body,GLM_SMOOTH);
glPushMatrix();
glTranslatef(-0.00,0.14,0.00);///glTranslatef(dx,dy,dz);
glmDraw(head,GLM_SMOOTH);
glPopMatrix();
///左半身
glPushMatrix();
glTranslatef(-0.20,0.00,0.00);
glRotatef(angle[1],0,0,1);
glTranslatef(-0.00,-0.06,0.00);
glmDraw(arm1,GLM_SMOOTH);
glPushMatrix();
//glTranslatef(dx,dy,dz);
glRotatef(angle[2],1,0,0);
glTranslatef(-0.02,-0.21,0.00);
glmDraw(hand1,GLM_SMOOTH);
glPopMatrix();
glPopMatrix();
glPushMatrix();
//glTranslatef(dx,dy,dz);
glRotatef(angle[3],1,0,0);
glTranslatef(-0.08,-0.47,0.00);
glScalef(0.35,0.5,0.5);
glmDraw(knee1,GLM_SMOOTH);
glPushMatrix();
//glTranslatef(dx,dy,dz);
glRotatef(angle[4],1,0,0);
glTranslatef(0.01,-0.60,0.00);
glScalef(0.4,0.3,0.3);
glmDraw(foot1,GLM_SMOOTH);
glPopMatrix();
glPopMatrix();
///右半身
glPushMatrix();
//glTranslatef(dx,dy,dz);
glTranslatef(0.20,0.00,0.00);
glRotatef(angle[5],0,0,1);
glTranslatef(-0.00,-0.06,0.00);
glmDraw(arm2,GLM_SMOOTH);
glPushMatrix();
//glTranslatef(dx,dy,dz);
glRotatef(angle[6],1,0,0);
glTranslatef(0.03,-0.21,0.00);;
glmDraw(hand2,GLM_SMOOTH);
glPopMatrix();
glPopMatrix();
glPushMatrix();
//glTranslatef(dx,dy,dz);
glRotatef(angle[7],1,0,0);
glTranslatef(0.08,-0.47,0.00);
glScalef(0.35,0.5,0.5);
glmDraw(knee2,GLM_SMOOTH);
glPushMatrix();
//glTranslatef(dx,dy,dz);
glRotatef(angle[8],1,0,0);
glTranslatef(-0.01,-0.60,0.00);
glScalef(0.4,0.3,0.3);
glmDraw(foot1,GLM_SMOOTH);
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void myLighting()
{
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);
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week15_homework");
head = myReadOne("data/head.obj");
body = myReadOne("data/body.obj");
arm1 = myReadOne("data/arm1.obj");
hand1 = myReadOne("data/hand1.obj");
knee1 = myReadOne("data/knee1.obj");
foot1 = myReadOne("data/foot1.obj");
arm2 = myReadOne("data/arm2.obj");
hand2 = myReadOne("data/hand2.obj");
knee2 = myReadOne("data/knee2.obj");
foot2 = myReadOne("data/foot2.obj");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
myLighting();
glutMainLoop();
}
```
沒有留言:
張貼留言