2021年5月24日 星期一

JOJO的電腦圖學_week14

   210524 week14

                                                                                                                                          🔔❤️

Timer & 動畫

Timer的部分

先開啟一個新的GLUT檔案












將main.cpp原本的程式碼備份













就可以刪掉了😂












畫個圓圈












#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("我是JOJO");
    glutDisplayFunc(display);
     glutMainLoop();
}


幾秒後換個顏色
加入這兩行
👉   void timer(int t)
     {
    glClearColor( 1,0,0,0 );///清除背景的色彩//紅色
    display();
     }

👉   glutTimerFunc(4000,timer,0);



Sphere的切法!

加入動畫的部分~製作鬧鐘?








(更改部分為豆沙粉色

#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);

     glPushMatrix();

     ///glutWireSphere(0.3,30,30);///實心的圓球

     glutSwapBuffers();

}

void timer(int t)

{

    glutTimerFunc(30,timer,t+1);

    angle++;

glClearColor( 1,1,0,0 );///清除背景的色彩

display();

}

int main(int argc, char** argv)

{

    glutInit( &argc, argv );

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );

    glutCreateWindow("我是JOJO");

    glutDisplayFunc(display);

    glutTimerFunc(2000,timer,0);///等4秒鐘

     glutMainLoop();

}


加個diff的變數

加入這幾行
👉  int diff=2;
👉   angle+=diff;
👉   if(angle>180)diff=-diff;
👉   if(angle<0)diff=-diff;

diff>每次角度都會改變多少的差異值













最後是掛上會轉動的手臂!











#include <GL/glut.h>
int angle=0;
void drawArm1()
{
    glPushMatrix();
    glScalef(1,0.5,0.5);
    glColor3f(1,0,0);glutSolidCube(0.3);///左手紅
    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.2,0);///掛到右上角
         glRotatef(angle,0,0,1);///轉動
         glTranslatef(-0.15,0,0);///把旋轉中心關節軸 放在正中央
         drawArm1();
     glPopMatrix();

     glutSwapBuffers();
}
int diff=2;
void timer(int t)
{
    glutTimerFunc(20,timer,t+1);
    angle+=diff;
    if(angle>90||angle<0)diff=-diff;
///glClearColor( 0,0,0,0 );///清除背景的色彩
display();
}
int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("我是JOJO");
    glutDisplayFunc(display);
    glutTimerFunc(2000,timer,0);///等4秒鐘

     glutMainLoop();
}

如果喜歡我的部落格的話
請幫我按右上角的愛心(根本按不下去)

也可以按右上角的小鈴鐺(這也按不下去)
才不會錯過我的更新哦!😉

沒有留言:

張貼留言

Week18期末作業(橘貓的跳舞熊熊)

 期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...