今天要來做計時器
1.先開啟GLUT,並畫一顆圓圈。程式碼如下:
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.3,30,30); /*實心的圓球,半徑、縱切、橫切
glutSwapBuffers();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutDisplayFunc(display);
glutMainLoop();
}
圖片如下
2.四秒後背景變成紅色
程式碼如下:
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.3,30,30);
glutSwapBuffers();
}
void timer(int t)
{
glClearColor(1,0,0,0);///清除背景色彩:紅色
display();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutDisplayFunc(display);
glutTimerFunc(4000,timer,0);///定時
glutMainLoop();
}
圖片如下
3.void display ()裏頭的glutSolidSphere(0.3,30,30); ,改成glutWireSphere(0.3,30,30); /*Wire:線
(圖片如下)
4.製作一個會旋轉的方塊
程式碼如下:
#include <GL/glut.h>
int angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidCube(0.3);
glPopMatrix();
glutSwapBuffers();
}
void timer(int t)
{
glutTimerFunc(30,timer,t+1);
angle++;
display();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutDisplayFunc(display);
glutTimerFunc(4000,timer,0);///定時
glutMainLoop();
}
(圖片如下)
程式碼如下:
#include <GL/glut.h>
int angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidCube(0.3);
glPopMatrix();
glutSwapBuffers();
}
int diff=1;
void timer(int t)
{
glutTimerFunc(20,timer,t+1);///20為速度
angle+=diff;
if(angle>180)diff=-diff;///超過180度,轉向反轉
if(angle<0)diff=-diff;
display();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutDisplayFunc(display);
glutTimerFunc(1000,timer,0);///定時
glutMainLoop();
}
6.製作一隻會動的手
程式碼如下:
#include <GL/glut.h>
int angle=0;
void drawArml(){
glPushMatrix();
glScalef(1,0.5,0.5);
glColor3f(1,0.5,0.5);
glutSolidCube(0.3);///左紅手
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,1,1);glutSolidCube(0.4);///身體白色
glPushMatrix();
glRotatef(angle,0,0,1);///轉動
glTranslatef(-0.15,0,0);///把選轉中心的關節軸 放在正中心
drawArml();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int diff=1;
void timer(int t)
{
glutTimerFunc(20,timer,t+1);///20為速度
angle+=diff;
if(angle>180)diff=-diff;///超過180度,轉向反轉
if(angle<0)diff=-diff;
display();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week14 timer");
glutDisplayFunc(display);
glutTimerFunc(1000,timer,0);///定時
glutMainLoop();
}
(圖片如下)





沒有留言:
張貼留言