2022年5月30日 星期一

RH的學習筆記٩(ˊᗜˋ*)وweek15

 播聲音、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); ///等你輸入數字
}
```

4.用播放mp3檔的寫法播放羊的叫聲
///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.開心檔案,把舊的display函式改名,寫一個新的display函式出來

2.要把模型弄出來,必須有glm.h、glm.cpp
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++打開

2-5:存檔後要在從試一次,最後執行完便可跑出模型了
3.作業 機器人擺動作
前置作業:先將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();

}
```






沒有留言:

張貼留言