2019年5月24日 星期五

week14_xiu

/ week14 /




主題 : 計時器 Timer

主題 : 內差公式

主題 : 動畫



一、計時器

(1) codeblocks開啟一個projectm ( file > new > project )



(2) 到 這裡 下載freeglut並解壓縮



(3) 先到 這裡 下載音檔



(4) 貼上程式碼


( 此為程式碼 )

#include <GL/glut.h>
#include <mmsystem.h>///NOW (0)發聲音
#include <stdio.h>///NOW3 for printf()
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSwapBuffers();
}
void timer(int t)///NOW (2)
{
    glutTimerFunc(1000, timer, t+1);///NOW3 一起床,馬上撥下一個鬧鐘, 時間才會準
    printf("現在的 timer(t)的t是: %d\n", t);///NOW3

    PlaySoundA("fart.wav", NULL, SND_ASYNC);///NOW (2)
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);///大一點
    glutCreateWindow("week14 timer");

    glutDisplayFunc(display);
    glutTimerFunc(1000, timer, 0);///NOW (1)

    glutMainLoop();

}

此為音檔放置位置


此音檔要放在freeglut資料夾裡面的bin


以下為會動的茶壺
( 以下為程式碼  )

#include <GL/glut.h>
#include <mmsystem.h>///Now (1)
float angle=0;
float nowX=0;///NOW2
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        ///glRotatef(angle, 0,0,1);
        glTranslatef(nowX, 0, 0);///NOW2
        glutSolidTeapot( 0.3 );
    glPopMatrix();
    glutSwapBuffers();
}
void timer(int t)///NOW timer!!!!
{
    /// 1000 ms = 1 sec,  30 ms = 1/33 sec , 33 fps
    glutTimerFunc(30, timer, t+1 );///NOW timer!!!! 起床要播下一個鬧鐘
    float alpha = (t%33) / 33.0;///NOW2 alpha 內插
    nowX = alpha* 1 + (1-alpha)* -1 ;///NOW2

    angle += 1;
    glutPostRedisplay();///系統重繪畫面
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);///變大了
    glutCreateWindow("week 14 timer");

    glutDisplayFunc(display);
    glutTimerFunc(1000, timer, 0);///NOW timer!!!!

    glutMainLoop();
}







沒有留言:

張貼留言