#include <GL/glut.h>
#include <mmsystem.h>///NOW (0)發聲音
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSwapBuffers();
}
void timer(int t)///NOW (2)
{
glutTimerFunc(1000, timer, 0);///NOW2
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, 30);///NOW (1)
glutMainLoop();
}
老師給的第三個程式
能讓聲音隨著計時器播放
#include <GL/glut.h>
#include <mmsystem.h>///NOW (0)發聲音
#include <stdio.h>///NOW3 for printf()
float angle=0;///NOW4
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///NOW4
glRotatef(angle, 0, 0, 1);///NOW4
glutSolidTeapot( 0.3 );///NOW4
glPopMatrix();///NOW4
glutSwapBuffers();
}
void timer(int t)///NOW (2)
{
glutTimerFunc(30, timer, t+1);///NOW4 ///NOW3 一起床,馬上撥下一個鬧鐘, 時間才會準
printf("現在的 timer(t)的t是: %d\n", t);///NOW3
angle = t;///NOW4
glutPostRedisplay();///NOW4 要更新畫面
}
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();
}
新增一個茶壺,然後讓他隨著計時器的計數轉動
二.內插公式
#include <GL/glut.h>
#include <mmsystem.h>///NOW (0)發聲音
#include <stdio.h>///NOW3 for printf()
float angle=0;///NOW4
float nowX=0;///NOW5
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///NOW4
///glRotatef(angle, 0, 0, 1);///NOW4
glTranslatef(nowX, 0, 0);///NOW5
glutSolidTeapot( 0.3 );///NOW4
glPopMatrix();///NOW4
glutSwapBuffers();
}
void timer(int t)///NOW (2)
{/// 1000 ms = 1秒, 33ms = 0.033秒 => 33*30=1000, 30fps
glutTimerFunc(33, timer, t+1);///NOW4 ///NOW3 一起床,馬上撥下一個鬧鐘, 時間才會準
printf("現在的 timer(t)的t是: %d\n", t);///NOW3
float alpha = (t%30) / 30.0;///變成 alpha: 0.0 ~ 1.0 ///NOW5
nowX = alpha*1.0 + (1-alpha)* -1.0;///NOW5
glutPostRedisplay();///NOW4 要更新畫面
}
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();
}
把 angle=t; 刪掉
加入這兩段程式碼做出動畫
float alpha = (t%30) / 30.0;///變成 alpha: 0.0 ~ 1.0 ///NOW5
nowX = alpha*1.0 + (1-alpha)* -1.0;///NOW5
三.動畫
用老師給的同學做的資料
在keyborad區加入 讀motion的程式
if(fout==NULL) fout=fopen("motion.txt", "w+");///NOW1
for(int i=0; i<20; i++){///NOW1
fprintf(fout, "%.1f ", angle[i]);///NOW1
}///NOW1
fprintf(fout, "\n");///NOW1
沒有留言:
張貼留言