2021年5月24日 星期一

𝔍𝔒𝔗𝔇-week14

 

電腦圖學_week14

2021/05/24(一)

   今日的上課內容:
  1. 印出實心圓球
  2. 背景變紅的計時器
  3. 柳丁縱切
  4. 等4秒方塊旋轉
  5. 控制角度內旋轉
  6. 手臂轉動

    今日程式碼:
        ///畫實心圓球
  • ///備份清空
  • #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);
  •     glutTimerFunc();
  •     
  •     glutMainLoop();
  • }
///背景變紅的計時器
  • ///備份清空
  • #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();
  • }
///等4秒方塊旋轉
  • ///備份清空
  • #include <GL/glut.h>
  • int angle = 0;
  • void display()
  • {
  •     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  •     glPushMatrix();///step02-1
  •         glRotatef(angle, 0, 0,1);///step02-1
  •         glutSolidCube(0.3);
  •     glPopMatrix();///step02-1
  •     glutSwapBuffers();///柳丁
  • }
  • void timer(int t)///step02-1 鬧鐘響了,timer叫了
  • {
  •    glutTimerFunc(30,timer, t+1);///step02-1 馬上設定下一個鬧鐘,別睡太久
  •    angle++;///step02-1 上個廁所
  •     display();///重新畫螢幕 step02-1 喝個水
  • }
  • 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();///step02-1
  •         glRotatef(angle, 0, 0,1);///step02-1
  •         glutSolidCube(0.3);
  •     glPopMatrix();///step02-1
  •     glutSwapBuffers();///柳丁
  • }
  • int diff = 2;
  • void timer(int t)///step02-1 鬧鐘響了,timer叫了
  • {
  •    glutTimerFunc(30,timer, t+1);///step02-1 馬上設定下一個鬧鐘,別睡太久
  •    angle+= diff;///step02-1 上個廁所
  •    if(angle>180) diff = -diff;
  •    if(angle<0) diff = -diff;
  •    display();///重新畫螢幕 step02-1 喝個水
  • }
  • 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();///step02-1
  •         glRotatef(angle, 0, 0,1);///step02-1
  •         glutSolidCube(0.3);
  •     glPopMatrix();///step02-1
  •     glutSwapBuffers();///柳丁
  • }
  • int diff = 2;
  • void timer(int t)///step02-1 鬧鐘響了,timer叫了
  • {
  •    glutTimerFunc(30,timer, t+1);///step02-1 馬上設定下一個鬧鐘,別睡太久
  •    angle+= diff;///step02-1 上個廁所
  •    if(angle>90 || angle<0) diff = -diff;
  •    display();///重新畫螢幕 step02-1 喝個水
  • }
  • int main(int argc, char** argv)
  • {
  •     glutInit(&argc, argv);
  •     glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
  •     glutCreateWindow("week14 timer");

  •     glutDisplayFunc(display);
  •     glutTimerFunc(0, timer, 0);///睡前第一個鬧鐘
  •                 ///要等多久 叫誰 參數
  •     glutMainLoop();
  • }
///關節轉動
  • ///備份清空
  • #include <GL/glut.h>
  • int angle = 0;
  • void drawArml()
  • {
  •     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();///step02-1
  •         glColor3f(1,1,1); glutSolidCube(0.4);///身體白
  •         glPushMatrix();
  •             ///glTranslatef(-0.2,+0.2,0);///(3)掛在右上角
  •             glRotatef(angle, 0, 0,1);///(2)轉動
  •             glTranslatef(-0.15,0,0);///(1)把旋轉中心的關節軸放在正中心
  •             drawArml();
  •     glPopMatrix();///step02-1
  •     glutSwapBuffers();///柳丁
  • }
  • int diff = 2;
  • void timer(int t)///step02-1 鬧鐘響了,timer叫了
  • {
  •    glutTimerFunc(30,timer, t+1);///step02-1 馬上設定下一個鬧鐘,別睡太久
  •    angle+= diff;///step02-1 上個廁所
  •    if(angle>90 || angle<0) diff = -diff;
  •    display();///重新畫螢幕 step02-1 喝個水
  • }
  • int main(int argc, char** argv)
  • {
  •     glutInit(&argc, argv);
  •     glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
  •     glutCreateWindow("week14 timer");

  •     glutDisplayFunc(display);
  •     glutTimerFunc(0, timer, 0);///睡前第一個鬧鐘
  •                 ///要等多久 叫誰 參數
  •     glutMainLoop();
  • }

    今日成果:
    
                                                ⬆️圓心實球
                            
⬆️背景變紅的計時器
⬆️等4秒方塊旋轉
⬆️控制角度內旋轉
⬆️免等限制角度旋轉
⬆️手臂關節轉動


沒有留言:

張貼留言

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

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