2021年5月24日 星期一

吉親摳ㄎㄎ-Week14

 電腦圖學

Week14

今日第一個任務畫出一個圓,大部分的程式碼可以看以前的打喔!!

程式碼:
#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();

}

1.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();
}

 1.2.1 
程式碼:
glutWireSphere(0.3,30,30);

2.1運用時間,類似設計鬧鐘一樣

程式碼:
#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) ///鬧鐘響了,timer叫了
{
    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();
}

2.2讓轉動不要著麼單調,逆時鐘順時鐘交換

程式碼:
#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=2;
void timer(int t) ///鬧鐘響了,timer叫了
{
    glutTimerFunc(20,timer,t+1); ///馬上設定下一個鬧鐘,不要響太久
               ///倍速
    angle+=diff; ///上個廁所
    if(angle>180) diff=-diff;
    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(4000  ,  timer  ,0);
                ///要等多久 叫誰 參數
    glutMainLoop();
}

3.1

程式碼:
#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=2;
void timer(int t) ///鬧鐘響了,timer叫了
{
    glutTimerFunc(20,timer,t+1); ///馬上設定下一個鬧鐘,不要響太久
               ///倍速
    angle+=diff; ///上個廁所
    if(angle>180 || 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(0  ,  timer  ,0);
                ///要等多久 叫誰 參數
    glutMainLoop();

}


3.2 最後加上手臂,今天的任務就大功告成囉


程式碼:



最後看一下我可愛的作業4,我斷斷續續花了一天的時間才完成,真的很開心,是大眼仔喔<3
程式碼我就不放了,有興趣可以去github看!!








沒有留言:

張貼留言

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

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