2021年3月29日 星期一

JOJO的電腦圖學_week06

210329 week06

🔔 ❤️

今天是各種轉轉系列

空白鍵轉轉











(有點長)

(粉紅底       為新增的藍藍細長方塊)

(抹茶色底       為按空白鍵就能轉動的關鍵)

#include <GL/glut.h>///(0)使用GLUT外掛

#include <stdio.h>

int N=0, vx[3000],vy[3000];///準備一堆頂點,等等要畫,介於-1~+1

float angle=0;///有N個頂點

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空

   glPushMatrix();///TODO:備份矩陣

        glRotatef(angle,0,0,1);///TODO:旋轉

        glScalef(0.5,0.1,0.1);///調成細長的

        glColor3f(0.3,0.3,1.0);///藍藍的

        glutSolidCube(1);///方塊


    glPopMatrix();///TODO:還原矩陣

    glutSwapBuffers();///交換兩倍的Buffers

}

void keyboard( unsigned char key,int x,int y)

{

    angle++;///TODO:

    display();///TODO:

}

void motion(int x,int y)

{

    printf("%d %d\n",x,y);///把頂點記起來,等等要畫

    vx[N]=(x-150)/150.0;

    vy[N]=-(y-150)/150.0;

    N++;

    display();

}

int main(int argc, char**argv)///???以前是int main()

{

    glutInit(&argc,argv);///(1)GLUT初始設定

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式

    glutCreateWindow("08160891我是JOJO");///(3)開窗

    glutKeyboardFunc(keyboard);

    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

    ///glutMouseFunc(mouse);///TODO:(1)mouse滑鼠的程式

    glutMotionFunc(motion);///TODO:(1)mouse滑鼠的程式

    glutMainLoop();///(5)主要迴圈

}

滑鼠轉轉









(抹茶色底       為更改部分)

#include <GL/glut.h>///(0)使用GLUT外掛

#include <stdio.h>

int N=0, vx[3000],vy[3000];///準備一堆頂點,等等要畫,介於-1~+1

float angle=0;///有N個頂點

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空

   glPushMatrix();///TODO:備份矩陣

        glRotatef(angle,0,0,1);///TODO:旋轉

        glScalef(0.5,0.1,0.1);///調成細長的

        glColor3f(0.3,0.3,1.0);///藍藍的

        glutSolidCube(1);///方塊


    glPopMatrix();///TODO:還原矩陣

    glutSwapBuffers();///交換兩倍的Buffers

}

void keyboard( unsigned char key,int x,int y)

{

}

void motion(int x,int y)

{

    angle++;///TODO:////TODO:只要mouse在motion時,就會增加角度

    display();///TODO:增加後,重畫畫面

    //printf("%d %d\n",x,y);///把頂點記起來,等等要畫

   // vx[N]=(x-150)/150.0;

    ///vy[N]=-(y-150)/150.0;

   //// N++;

    //////display();

}

void mouse(int button,int state,int x,int y)

{

}

int main(int argc, char**argv)///???以前是int main()

{

    glutInit(&argc,argv);///(1)GLUT初始設定

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式

    glutCreateWindow("08160891我是JOJO");///(3)開窗

    glutKeyboardFunc(keyboard);

    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

    glutMouseFunc(mouse);///TODO:(1)mouse滑鼠的程式

    glutMotionFunc(motion);///TODO:(1)mouse滑鼠的程式

    glutMainLoop();///(5)主要迴圈

}

方塊轉轉(自己轉)






(刪掉豪多部分)

(抹茶色底       為更改部分)

#include <GL/glut.h>///(0)使用GLUT外掛

float angle=0;///有N個頂點

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空

   glPushMatrix();///TODO:備份矩陣

        glRotatef(angle++,0,0,1);///TODO2:要轉動angle

        glutSolidCube(1);///方塊

    glPopMatrix();///TODO:還原矩陣

    glutSwapBuffers();///交換兩倍的Buffers

}

int main(int argc, char**argv)///???以前是int main()

{

    glutInit(&argc,argv);///(1)GLUT初始設定

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式

    glutCreateWindow("08160891我是JOJO");///(3)開窗

    glutIdleFunc(display);///TODO:idle很閒的時候,就重畫畫面

    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

    glutMainLoop();///(5)主要迴圈

}

長條轉轉(自己轉)








(抹茶色底       為更改部分)

#include <GL/glut.h>///(0)使用GLUT外掛

float angle=0;///有N個頂點

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空

   glPushMatrix();///TODO:備份矩陣

        glTranslatef(0,0,0);///把正確的手臂,掛在肩上

        glRotatef(angle++,0,0,1);///TODO2:要轉動angle

        glTranslatef(-0.25,0,0);///將旋轉中心,放在正中心

       glScalef(0.5,0.1,0.1);///細細長長的

        glutSolidCube(1);///方塊

    glPopMatrix();///TODO:還原矩陣

    glutSwapBuffers();///交換兩倍的Buffers

}

int main(int argc, char**argv)///???以前是int main()

{

    glutInit(&argc,argv);///(1)GLUT初始設定

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式

    glutCreateWindow("08160891我是JOJO");///(3)開窗

    glutIdleFunc(display);///TODO:idle很閒的時候,就重畫畫面

    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

   glutMainLoop();///(5)主要迴圈

}

這是一個不會轉的長條









把下面兩行刪掉即可

👉///glTranslatef(0,0,0);///把正確的手臂,掛在肩上

👉///glRotatef(angle++,0,0,1);///TODO2:要轉動angle

下手肘轉轉









(抹茶色底       為更改部分)

增加個void hand()

#include <GL/glut.h>///(0)使用GLUT外掛

float angle=0;///有N個頂點

void hand()

{

    glPushMatrix();///TODO:備份矩陣

        glScalef(0.5,0.1,0.1);///細細長長的

        glutSolidCube(1);///方塊

    glPopMatrix();///TODO:還原矩陣

}

void display()

{

......  

}

左手臂轉轉






更改void display()裡面的內容

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空
    glPushMatrix();///TODO:備份矩陣
        glTranslatef(-0.25,0,0);///把正確的手臂,掛在肩上
        glRotatef(angle,0,0,1);///TODO2:要轉動angle  ///angle不用++
        glTranslatef(-0.25,0,0);///將旋轉中心,放在正中心
        hand();///上手臂

    glPushMatrix();///TODO:備份矩陣
        glTranslatef(-0.25,0,0);///把正確的手臂,掛在肩上
        glRotatef(angle,0,0,1);///TODO2:要轉動angle  ///angle不用++
        glTranslatef(-0.25,0,0);///將旋轉中心,放在正中心
    hand();///下手肘
        glPopMatrix();///TODO:還原矩陣
    glPopMatrix();///TODO:還原矩陣
    glutSwapBuffers();///交換兩倍的Buffers
    angle++;    ///angle++
}


兩隻手轉轉
 glutSwapBuffers();///交換兩倍的Buffers
 angle++;
以上,新增右手臂的程式碼


glPushMatrix();///右手臂
        glTranslatef(+0.25,0,0);///把正確的手臂,掛在肩上
        glRotatef(angle,0,0,1);///TODO2:要轉動angle
        glTranslatef(+0.25,0,0);///將旋轉中心,放在正中心
        hand();///上手臂

        glPushMatrix();///TODO:備份矩陣
            glTranslatef(+0.25,0,0);///把正確的手臂,掛在肩上
            glRotatef(angle,0,0,1);///TODO2:要轉動angle
            glTranslatef(+0.25,0,0);///將旋轉中心,放在正中心
            hand();///下手肘
        glPopMatrix();///TODO:還原矩陣
    glPopMatrix();///TODO:還原矩陣


如果喜歡我的部落格的話
請幫我按右上角的愛心(根本按不下去)
也可以按右上角的小鈴鐺(這也按不下去)
才不會錯過我的更新哦!😉

沒有留言:

張貼留言

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

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