2021年6月22日 星期二

張淳雅_Week14

 Timer與動畫

1. 
#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(void) { 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(3000,timer,0); glutMainLoop(); }

3. 等三秒,背景變色方塊旋轉
#include <GL/glut.h> float angle=0; void display(void) { 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); glClearColor(1,0,0,0); angle++; display(); } int main(int argc, char** argv) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow(" Week14 timer "); glutDisplayFunc(display); glutTimerFunc(3000,timer,0); glutMainLoop(); }

4. 向左轉90度換向右轉90度,重複動作
#include <GL/glut.h> float angle=0; void display(void) { 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(20,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(); }

5. 加入一個紅色長方(一樣三秒後變紅色背景)
#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(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glColor3f(1,1,1); glutSolidCube(0.4); glPushMatrix(); ///glTranslatef(); ///glRotatef(angle,0,0,1); glTranslatef(-0.1,0,0); drawArm1(); glPopMatrix(); glPopMatrix(); glutSwapBuffers(); } int diff=2; void timer(int t) { glutTimerFunc(20,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(); }

6. 把方塊掛角上並旋轉(
三秒後變紅色背景,綠色方塊向左轉90度換向右轉90度,重複動作)
#include <GL/glut.h> float angle=0; void drawArm1() { glPushMatrix(); glScalef(1,0.5,0.5); glColor3f(0,1,0);///換綠色方便看 glutSolidCube(0.2); glPopMatrix(); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glColor3f(1,1,1); glutSolidCube(0.4); glPushMatrix(); glTranslatef(-0.2,0.2,0);///掛上肩膀 glRotatef(angle,0,0,1); glTranslatef(-0.1,0,0); drawArm1(); glPopMatrix(); glPopMatrix(); glutSwapBuffers(); } int diff=2; void timer(int t) { glutTimerFunc(20,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(); }


沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...