2023年3月22日 星期三

電腦圖學紀錄 階層性轉動

 GLUT專案

week06-1_TRT_robot2


#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);///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();
}


                                                                      以中心點旋轉的茶壺


week06-2_TRT_robot_hierarchy


#include <GL/glut.h>
float angle = 0;
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); 

    glutSolidTeapot(0.3);///身體

    glPushMatrix();///手臂
        glTranslatef(0.49,0.13,0);
        glRotatef( angle, 0, 0, 1 );
        glTranslatef(0.46,-0.05,0);
        glutSolidTeapot( 0.3 );

        glPushMatrix();///手肘
            glTranslatef(0.49,0.13,0);
            glRotatef( angle, 0, 0, 1 );
            glTranslatef(0.46,-0.05,0);
            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);///step02-1 有空idle時,就會重劃畫面

    glutMainLoop();
}






week06-3_TRT_robot_arm_hand_right_left


#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.把旋轉中心放在中心點
        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.把旋轉中心放在中心點
        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();
}


第一節手肘

畫一個手臂連著手肘

手臂手肘都會動



兩隻會動的手臂手肘



沒有留言:

張貼留言