2018年5月18日 星期五

Week12 徐如君

複習T-R-T轉動


程式碼:
1.glPushMatrix();
2.glTranslatef(x,y,z);
3.glRotatef(-angle,x,y,z);//小心,旋轉軸是負的
4.glTranslatef(x,y,z);
5.drawArm();//畫手臂
6.glPopMatrix();

PlaySound,MP3播放

1.開啟GLUT專案,並在主程式的地方輸入程式碼
   
程式碼如下:
(1)#include<mmsystem.h> (1)多媒體系統才會有
(2) PlaySound("Do.wav", NULL , SND_ASYNC |SND_LOOP );
     播放多媒體的聲音,後面的SND_LOOP為連續播放
3.MP3播放
   

程式碼如下
1. #include "CMP3_MCI.h"
2. CMP3_MCI myMP3;
3.  myMP3.Load("123.mp3");
4.  myMP3.Play();

需要再上可用軟體下載CMP3_MCI.h的檔案和下載mp3檔案(音樂檔要放在working目錄裡)

計時器Timer

1.輸入下列程式碼產生計時器

1. #include<windows.h> 因為mmsystem.h需要window.h
2. #include<mmsystem.h> 多媒體系統才會有
3. void timer(int t)
{
    glutTimerFunc(1000, timer, t+1);  ///等多久,呼叫誰,參數  1000=1秒
    PlaySound("Do.wav", NULL , SND_ASYNC);
}
4.glutTimerFunc(5000, timer,0);   在createwindow的這行程式碼下輸入 
   5000是指5秒後聲音即會想起

線性內插、動畫

1.先了解內差的公式
   alpha* 新(角度值)+(1-alpha)*舊(角度值)
  這時開啟excel去熟悉內插
  
2.用程式寫內插
   
先把程式碼刪除(注意:請留下圖中有的程式碼)
加入下列的程式碼 (下方紅字請注意)
#include<GL/glut.h>

#include <stdio.h>
float angle=0,oldAngle=0,newAngle=90;///Now:角度、舊角度、新角度
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
      glRotatef(angle,0,0,1);///Now:會照角度去旋轉
      glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
void timer(int t)
{
    glutTimerFunc(1000, timer, t+1);///等多久,呼叫誰,參數
    float alpha=(t)/30.0;///Now:算出一個內插的alpha值
    angle= newAngle*alpha+oldAngle*(1-alpha);///Now:角度去內插
    glutPostRedisplay();///Now:讀照著上面的角度,重畫
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT Shapes");

    glutTimerFunc(0, timer,0);///Now:有個計時器函式 timer
    glutDisplayFunc(display);
    glutMainLoop();
}

沒有留言:

張貼留言