2023年3月22日 星期三

rita - week06 - 階層的轉動

    第一個程式

         codeblock/file/new/project/glut專案後再去到桌面葉老師上課用軟體 / 
        將freegult壓縮檔解壓縮 / 將freegult資料夾放置桌面  
        將freegult 內的lib內的 / libfreegult.a複製 / 改名為libgult32.a
        新增一個glut專案 / 取名為week06-1_TRT_robot2
        複習上週所學
        ///week06-1_TRT_robot2
        ///複製上週week05-2_TRT_robot貼上
        #include <GL/glut.h>
        float angle=0;
        void display()
        {
                glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                glutSolidSphere(0.02,30,30);///正中心的圓球
                glPushMatrix();
                       glRotatef(angle,0,0,1);
                       glTranslatef(0.46,0.05,0);///(1)把旋轉的中心,放中心
                       glutSolidTeapot(0.3);
                glPopMatrix();

                glutSwapBuffers();
                angle++;
        }
        int main(int argc, char *argv[])
        {
                 glutInit(&argc, argv);
                 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                 glutCreateWindow("week05");

                 glutDisplayFunc(display);
                 glutIdleFunc(display);
                 glutMainLoop();
          }

     第二個程式

        ///week06-2_TRT_robot3
        ///改自week06-1
        ///很多不同的連結狀況,而且手臂會帶手肘轉動
        #include <GL/glut.h>
        float angle=0;
        void display()
        {
                glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                glutSolidSphere(0.02,30,30);///正中心的圓球

                glutSolidTeapot(0.3);///step02-1身體

                glPushMatrix();///右手臂
                    glTranslatef(0.49,0.13,0);///step02-2新的
                    glRotatef(angle,0,0,1);///(2)就可以轉動
                    glTranslatef(0.46,-0.05,0);///(1)把旋轉的中心,放中心
                    glutSolidTeapot(0.3);
                glPopMatrix();

                glutSwapBuffers();
                angle++;
          }
        int main(int argc, char *argv[])
        {
                glutInit(&argc, argv);
                glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                glutCreateWindow("week06");
    
            glutDisplayFunc(display);
            glutIdleFunc(display);
            glutMainLoop();
        }

    第二個程式-2

    ///week06-2_TRT_robot3
    ///改自week06-1
    ///很多不同的連結狀況,而且手臂會帶手肘轉動
    #include <GL/glut.h>
    float angle=0;
    void display()
    {
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

       glutSolidSphere(0.02,30,30);///正中心的圓球

        glutSolidTeapot(0.3);///step02-1身體

        glPushMatrix();///右手臂
            glTranslatef(0.49,0.13,0);///step02-2新的
            glRotatef(angle,0,0,1);///(2)就可以轉動
            glTranslatef(0.46,-0.05,0);///(1)把旋轉的中心,放中心
            glutSolidTeapot(0.3);

            glPushMatrix();///右手肘
                glTranslatef(0.49,0.13,0);///step02-2新的
                glRotatef(angle,0,0,1);///(2)就可以轉動
                glTranslatef(0.46,-0.05,0);///(1)把旋轉的中心,放中心
                glutSolidTeapot(0.3);
            glPopMatrix();
        glPopMatrix();

        glutSwapBuffers();
        angle++;
    }
    int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
        glutCreateWindow("week06");

        glutDisplayFunc(display);
        glutIdleFunc(display);
        glutMainLoop();
    }


    第三個程式

        ///week06-3_TRT_robot_arm_hand_right_left///拿上週的week05-2來用
        ///畫出大的身體,畫出手臂
        #include <GL/glut.h>
        float angle=0;
        void drawHand()
        {
            glPushMatrix();
                glScalef(1,0.3,0.3);
                glutSolidCube(0.5);
            glPopMatrix();
        }
        void display()
        {
            glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            glPushMatrix();
                ///(3)要掛上去
                glRotatef(angle,0,0,1);///(2)轉動
                glTranslatef(0.25,0,0);///(1)把中心放在中心
                drawHand();
            glPopMatrix();

            glutSwapBuffers();
            angle++;
        }
        int main(int argc, char *argv[])
        {
            glutInit(&argc, argv);
            glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
            glutCreateWindow("week06");

            glutDisplayFunc(display);
            glutIdleFunc(display);
            glutMainLoop();
        }


    第三個程式-2(出現手臂)

    ///week06-3_TRT_robot_arm_hand_right_left///拿上週的week05-2來用
    ///畫出大的身體,畫出手臂
    #include <GL/glut.h>
    float angle=0;
    void drawHand()
    {
        glPushMatrix();
            glScalef(1,0.3,0.3);
            glutSolidCube(0.5);
        glPopMatrix();
    }
    void display()
    {
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glPushMatrix();
            ///(3)要掛上去
            ///glRotatef(angle,0,0,1);///(2)轉動
            ///glTranslatef(0.25,0,0);///(1)把中心放在中心
           ///step03-1 把前面的T-R-T都先註解掉,會較好理解
            drawHand();///上手臂
            glPushMatrix();
                ///(3)要掛上去
                glRotatef(angle,0,0,1);///(2)轉動
                glTranslatef(0.25,0,0);///(1)把中心放在中心
                drawHand();
            glPopMatrix();
        glPopMatrix();

        glutSwapBuffers();
        angle++;
    }
    int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
        glutCreateWindow("week06");

        glutDisplayFunc(display);
        glutIdleFunc(display);
        glutMainLoop();
    }

    第三個程式-3(將手臂掛在正確的位置)

    ///week06-3_TRT_robot_arm_hand_right_left///拿上週的week05-2來用
    ///畫出大的身體,畫出手臂
    #include <GL/glut.h>
    float angle=0;
    void drawHand()
    {
        glPushMatrix();
            glScalef(1,0.3,0.3);
            glutSolidCube(0.5);
        glPopMatrix();
    }
    void display()
    {
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glPushMatrix();
            glTranslatef(0.25,0,0);///(3)要掛上去
            glRotatef(angle,0,0,1);///(2)轉動
            glTranslatef(0.25,0,0);///(1)把中心放在中心
            ///step03-1 把前面的T-R-T都先註解掉,會較好理解
           ///設定好後,再把上面的程式解開來
            drawHand();///上手臂
            glPushMatrix();
                glTranslatef(0.25,0,0);///(3)要掛上去
                glRotatef(angle,0,0,1);///(2)轉動
                glTranslatef(0.25,0,0);///(1)把中心放在中心
                drawHand();
            glPopMatrix();
        glPopMatrix();

        glutSwapBuffers();
        angle++;
    }
    int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
        glutCreateWindow("week06");

        glutDisplayFunc(display);
        glutIdleFunc(display);
        glutMainLoop();
    }


    第三個程式-4(出現左手臂手肘,將左右手臂手肘掛在正確的位置)

    ///week06-3_TRT_robot_arm_hand_right_left///拿上週的week05-2來用
    ///畫出大的身體,畫出手臂
    #include <GL/glut.h>
    float angle=0;
    void drawHand()
    {
        glPushMatrix();
            glScalef(1,0.3,0.3);
            glutSolidCube(0.5);
        glPopMatrix();
    }
    void display()
    {
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glPushMatrix();///右上手臂
            glTranslatef(0.25,0,0);///(3)要掛上去
            glRotatef(angle,0,0,1);///(2)轉動
            glTranslatef(0.25,0,0);///(1)把中心放在中心
            ///step03-1 把前面的T-R-T都先註解掉,會較好理解
            ///設定好後,再把上面的程式解開來
            drawHand();///右上手臂

            glPushMatrix();///右下手肘
                glTranslatef(0.25,0,0);///(3)要掛上去
                glRotatef(angle,0,0,1);///(2)轉動
                glTranslatef(0.25,0,0);///(1)把中心放在中心
                drawHand();///右下手肘
            glPopMatrix();
        glPopMatrix();

        glPushMatrix();///左上手臂
            glTranslatef(-0.25,0,0);///(3)要掛上去
            glRotatef(angle,0,0,1);///(2)轉動
            glTranslatef(-0.25,0,0);///(1)把中心放在中心
            ///step03-1 把前面的T-R-T都先註解掉,會較好理解
            ///設定好後,再把上面的程式解開來
            drawHand();///左上手臂

            glPushMatrix();///左下手肘
                glTranslatef(-0.25,0,0);///(3)要掛上去
                glRotatef(angle,0,0,1);///(2)轉動
                glTranslatef(-0.25,0,0);///(1)把中心放在中心
                drawHand();///左下手肘
            glPopMatrix();
        glPopMatrix();

        glutSwapBuffers();
        angle++;
    }
    int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
        glutCreateWindow("week06");

        glutDisplayFunc(display);
        glutIdleFunc(display);
       glutMainLoop();
    }






沒有留言:

張貼留言