1 timer設定
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void timer(int t)///timer()函式,做對應動作
{
glutTimerFunc(500,timer,t+1);///設定下一個鬧鐘
angle+=90;///增加90度
glutPostRedisplay();///重畫畫面
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week14");
glutDisplayFunc(display);
glutTimerFunc(2000,timer,0);///設定timer函式
glutMainLoop();
}
2 進階
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void timer(int t)///timer()函式,做對應動作
{
glutTimerFunc(500,timer,t+1);///設定下一個鬧鐘
angle+=90;///增加90度
glutPostRedisplay();///重畫畫面
}
void keyboard(unsigned char key,int x,int y)
{
glutTimerFunc(0,timer,0);///設定timer函式
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week14");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);///keyboard()
glutMainLoop();
}
3.進階進階
#include <GL/glut.h>
float angle=0,oldangle=0,newangle=0; ///宣告變數
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void timer(int t)///timer()函式,做對應動作
{
if(t<100) glutTimerFunc(50,timer,t+1);
float alpha = t/100.0;///變成float值介於0.00~1.00之間
angle = newangle*alpha +(1-alpha) * oldangle;
glutPostRedisplay();///重畫畫面
}
void motion(int x,int y)
{
angle = x;///即時更新角度
glutPostRedisplay();///重畫畫面
}
void mouse(int button,int state,int x,int y)
{
if(state==GLUT_DOWN) oldangle=x;///放下去
if(state==GLUT_UP) newangle=x;///放開來
glutPostRedisplay();///重畫畫面
}
void keyboard(unsigned char key,int x,int y)
{
glutTimerFunc(0,timer,0);///設定timer函式
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week14");
glutDisplayFunc(display);
glutMouseFunc(mouse);///按下去表示起點
glutMotionFunc(motion);///當mouse在motion時,即時更新畫面
glutKeyboardFunc(keyboard);///keyboard()
glutMainLoop();
}
沒有留言:
張貼留言