2023年3月22日 星期三

DTang--week06_階層轉動

 week06-1_TRT_robot2

透過glutSolidShpere();//圓球 新增一個圓形作為中心點,可方便照出相對應的中心位置

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  ///清背景

    glutSolidSphere(0.02,30,30); ///利用圓球找出正中央

    glPushMatrix();  /// 備份矩陣

        glTranslatef(0.25,0.25,0);  ///(3)將茶壺放置到要放的位置

        glRotatef(angle,0,0,1);  /// (2)轉動看成果是否符合預想

        glTranslatef(0.46,-0.05,0); ///(1)將茶壺中心放置正中央

        glutSolidTeapot(0.3);

    glPopMatrix();  ///還原矩陣

    glutSwapBuffers(); ///請GLUT畫面swap送到顯示的地方

    angle++; ///  把角度++

}





-------------------------------------------------------------------------------------------------------------------

step02-1

week06-2_TRT_robot3_hierarchy

--1 新增一個茶壺物件-->當作身體

--2 將旋轉的茶壺物件放至指定位置((右方壺的出水口處)),當作手臂



--3 增加第三個茶壺物件,放在原本轉動的第二茶壺上,當作手肘(elbow)

glutSolidTeapot(0.3); /// step 02-1 當作身體

    glPushMatrix();  /// stpe02-1 as right arm
        glTranslatef(0.49,0.13,0);   /// step02-1 new move
        glRotatef(angle,0,0,1);  /// (2)轉動看成果是否符合預想
        glTranslatef(0.46,-0.05,0); ///(1)將茶壺中心放置正中央
        glutSolidTeapot(0.3);

        glPushMatrix(); /// step02-2 as right elbow(手肘)
            glTranslatef(0.49,0.13,0);   /// step02-1 new move
            glRotatef(angle,0,0,1);  /// (2)轉動看成果是否符合預想
            glTranslatef(0.46,-0.05,0); ///(1)將茶壺中心放置正中央
            glutSolidTeapot(0.3);
        glPopMatrix();

    glPopMatrix();  
---------------------------------------------------------------------------------------------------------------------

step02-3 

week06-3_TRT_robot_arm_hand_right_left

--1 建立新專案,新增cube

--2 增加drawhand()涵式,建立長方形手





---------------------------------------------------------------------------------------------------------------------

step03-1

延續 week06-3

--1 新增另一長方形物件,當作手肘

--2 停止身體的rotate涵式,單獨轉動新物件

--3 將位置調整至正確位置(想要放的位置)

--4 將手臂的物件加入轉動,並同樣放置在預想位置



--5 增加左半邊手臂手肘



到目前為止,整個display()跟drawHand()涵式如下:

void drawHand()

{

    glPushMatrix();

    glScaled(1,0.3,0.3);

        glutSolidCube(0.5);

    glPopMatrix();

}


void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  ///清背景

    //glColor3f(0,1,0); /// green body

    glPushMatrix(); ///右上手臂

        glTranslatef(0.25,0,0);

        glRotatef(angle,0,0,1);  ///

        glTranslatef(0.25,0,0); ///

        ///step 03-1

        drawHand(); ///右上手臂

            glPushMatrix(); ///右上手肘

                glTranslatef(0.25,0,0);

                glRotatef(angle,0,0,1);  ///

                glTranslatef(0.25,0,0);

                drawHand();

            glPopMatrix(); ///右上手肘

    glPopMatrix();



    glPushMatrix(); ///左上手臂

        glTranslatef(-0.25,0,0);

        glRotatef(angle,0,0,1);  ///

        glTranslatef(-0.25,0,0); ///

        ///step 03-1

        drawHand(); ///左上手臂


            glPushMatrix(); ///左上手肘

                glTranslatef(-0.25,0,0);

                glRotatef(angle,0,0,1);  ///

                glTranslatef(-0.25,0,0);

                drawHand();

            glPopMatrix(); ///左上手肘


    glPopMatrix();

    glutSwapBuffers(); ///請GLUT畫面swap送到顯示的地方

    angle++; ///  把角度++

}












沒有留言:

張貼留言