主題:Timer & 動畫
0. 複習
MAYA export :
- 有貼圖 >>> GLM_TEXTURE
- 有material >>> GLM_MATERIAL
1. 寫程式(counter)
- 開GLUT專案 => 備份main.cpp
#include <GL/glut.h>void display(){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///glutSolidSphere(0.3,30,30);///實心glutWireSphere(0.3,30,30);///線框glutSwapBuffers();}int main(int argc,char ** argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);glutCreateWindow("week14");glutDisplayFunc(display);glutMainLoop();}
執行結果(實心、框線) :
- 加上timer

#include <GL/glut.h>void display(){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glutWireSphere(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");glutDisplayFunc(display);glutTimerFunc(3000,timer,0);glutMainLoop();}
- 畫會旋轉的方塊
#include <GL/glut.h>float 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);///20: 50fps, 30: 33fps, 50: 20fps ///不能設太小glClearColor(1,0,0,0);angle++;display();///重畫畫面}int main(int argc,char ** argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);glutCreateWindow("week14");glutDisplayFunc(display);glutTimerFunc(3000,timer,0);glutMainLoop();}執行結果:
- 特定角度旋轉
#include <GL/glut.h>float 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=2;void timer(int t){glutTimerFunc(30,timer,t+1);glClearColor(1,0,0,0);if(angle>90)diff=-2;if(angle<0) diff=+2;angle+=diff;display();}int main(int argc,char ** argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);glutCreateWindow("week14");glutDisplayFunc(display);glutTimerFunc(3000,timer,0);glutMainLoop();}
執行結果:
- 加上TRT轉動
- 先畫簡易圖形
#include <GL/glut.h>float angle=0;void drawArm1(){glPushMatrix();glScalef(1,0.5,0.5);glColor3f(1,0,0);glutSolidCube(0.2);glPopMatrix();}void display(){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glPushMatrix();glColor3f(1,1,1);glutSolidCube(0.4);glPushMatrix();glTranslatef(-0.2,0.15,0);glRotatef(angle,0,0,1);glTranslatef(-0.1,0,0);drawArm1();glPopMatrix();glPopMatrix();glutSwapBuffers();}int diff=2;void timer(int t){glutTimerFunc(30,timer,t+1);if(angle>90)diff=-2;if(angle<0) diff=+2;angle+=diff;display();}int main(int argc,char ** argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);glutCreateWindow("week14");glutDisplayFunc(display);glutTimerFunc(3000,timer,0);///glutTimerFunc()glutMainLoop();}






沒有留言:
張貼留言