2023年3月22日 星期三

sheeba - week06 - 階層性轉動

 Step01-1

為了複習考試題目,複習上週的上課內容

///貼上上週的week05-2_TRT_robot
#include <GL/glut.h>
float angle=0;///step02-2
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///step02-2²M­I´º
    glutSolidSphere(0.02, 30, 30);///正中心的圓球

    glPushMatrix();

    glPushMatrix();
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.46, 0.05, 0);///(1)把旋轉中心放到中心
        ///glTranslatef(0.5, 0.5, 0);///step03-3先註解掉
        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();
}

Step02-1



///week06-2_TRT_robot_hierarchy改自week06-1
#include <GL/glut.h>
float angle=0;///step02-2
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///step02-2²M­I´º
    glutSolidSphere(0.02, 30, 30);///正中心的圓球

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

    glPushMatrix();
    ///step02-1先註解掉///glTranslatef
        glTranslatef(0.5, 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();
}

Step02-2

要更多層的轉動


///week06-2_TRT_robot_hierarchy改自week06-1
#include <GL/glut.h>
float angle=0;///step02-2
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///step02-2²M­I´º
    ///glutSolidSphere(0.02, 30, 30);///正中心的圓球

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

    glPushMatrix();
    ///step02-1先註解掉///glTranslatef
        glTranslatef(0.5, 0.13, 0);///step02-2新的
        glRotatef(angle, 0, 0, 1);///(2)就可以轉動
        glTranslatef(0.46, -0.05, 0);///(1)把旋轉中心放到中心
        glutSolidTeapot(0.3);

        glPushMatrix();
    ///step02-1先註解掉///glTranslatef
            glTranslatef(0.5, 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();
}

Step02-3

要再開一個新的程式   改用上週的glutSolidCube()變形成長方形   慢慢建出TRT多層的關係


///week06-3_TRT_robot_arm_hand_right_left從上週的week05-2拿來用
#include <GL/glut.h>
float angle=0;///step02-2
void drawHand()
{
    glPushMatrix();
    glScalef(1, 0.3, 0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///step02-2²M­I´º

    glPushMatrix();
    ///要掛上去
        glRotatef(angle, 0, 0, 1);///(2)轉動
        glTranslatef(0.25, 0, 0);///(1)把中心放到正中心
        ///glTranslatef(0.5, 0.5, 0);///step03-3先註解掉
        drawHand();
    glPopMatrix();

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

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

Step03-1


Step03-2

做左右手臂



///week06-3_TRT_robot_arm_hand_right_left從上週的week05-2拿來用
#include <GL/glut.h>
float angle=0;///step02-2
void drawHand()
{
    glPushMatrix();
    glScalef(1, 0.3, 0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///step02-2²M­I´º

    glPushMatrix();
    ///要掛上去
        glTranslatef(0.25, 0, 0);///(3)要掛上去
        glRotatef(angle, 0, 0, 1);///(2)轉動
        glTranslatef(0.25, 0.5, 0);///(1)把中心放在正中心
        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.5, 0);///(1)把中心放在正中心
        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();
}

Step03-3

模擬期中考

沒有留言:

張貼留言