2023年3月23日 星期四

大吃六斤Week06

week06

將上週的week05-2_TRT_robot程式碼拿來修改

week06-1_TRT_robot2_teapot

#include <GL/glut.h>

float angle = 0 ;

void display( )

{

    glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glutSolidSphere( 0.01 , 30 , 30 ); ///小球作為中心點

    glPushMatrix( );

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

        glTranslatef( 0.45 , 0 , 0 ); ///往右移動0.45讓關節在正中心

        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();

}


在程式碼加上 glTranslatef( 0.5 , 0.5 , 0); ///把茶壺掛到( 0.5 , 0.5 , 0 ) 的座標


week06-2_TRT_robot3_hierarchy

複製week05-2的程式碼
#include <GL/glut.h>
float angle = 0 ;
void myCube()
{
    glPushMatrix();
        glScalef(1,0.3,0.3); ///調大小
        glutSolidCube(0.5); ///正方塊
    glPopMatrix();
}
void display()
{
    glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glutSolidSphere(0.01,30,30); ///小球作為中心點

    glPushMatrix();
        glTranslatef(0.25,0.0,0);
        glRotatef (angle,0,0,1) ; 
        glTranslatef(0.25,0,0); 
        myCube(); 
        glPushMatrix();
            glTranslatef(0.25,0.0,0); 
            glRotatef (angle,0,0,1) ; 
            glTranslatef(0.25,0,0); 
            myCube(); 
        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_robot4_arm_hand_right_left

glPushMatrix();
        glTranslatef(0.25,0.0,0); 
        glRotatef (angle,0,0,1) ; 
        glTranslatef(0.25,0,0); 
        myCube(); 
        glPushMatrix();
            glTranslatef(0.25,0.0,0); 
            glRotatef (angle,0,0,1) ;
            glTranslatef(0.25,0,0); 
            myCube(); 
        glPopMatrix();
    glPopMatrix();

複製一遍,把位置加上負號,做出左右手

#include <GL/glut.h>
float angle = 0 ;
void myCube() ///改函式
{
    glPushMatrix();
        glScalef(1,0.3,0.3); ///調大小
        glutSolidCube(0.5); ///正方塊
    glPopMatrix();
}
void display()
{
    glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glutSolidSphere(0.01,30,30); ///小球作為中心點

    glPushMatrix(); ///右邊的
        glTranslatef(0.25,0.0,0);
        glRotatef (angle,0,0,1) ;
        glTranslatef(0.25,0,0);
        myCube();
        glPushMatrix();
            glTranslatef(0.25,0.0,0);
            glRotatef (angle,0,0,1) ;
            glTranslatef(0.25,0,0);
            myCube();
        glPopMatrix();
    glPopMatrix();

    glPushMatrix(); ///左邊的
        glTranslatef(-0.25,0.0,0);
        glRotatef (angle,0,0,1) ;
        glTranslatef(-0.25,0,0);
        myCube();
        glPushMatrix();
            glTranslatef(-0.25,0.0,0);
            glRotatef (angle,0,0,1) ;
            glTranslatef(-0.25,0,0);
            myCube();
        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-4_TRT_robot5_mouse_motion_angle


#include <GL/glut.h>
float angle = 0 ;
void myCube() ///改函式
{
    glPushMatrix();
        glScalef(1,0.3,0.3); ///調大小
        glutSolidCube(0.5); ///正方塊
    glPopMatrix();
}
void display()
{
    glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glutSolidSphere(0.01,30,30); ///小球作為中心點

    glPushMatrix(); ///右邊的
        glTranslatef(0.25,0.0,0);
        glRotatef (angle,0,0,1) ;
        glTranslatef(0.25,0,0);
        myCube();
        glPushMatrix();
            glTranslatef(0.25,0.0,0);
            glRotatef (angle,0,0,1) ;
            glTranslatef(0.25,0,0);
            myCube();
        glPopMatrix();
    glPopMatrix();

    glPushMatrix(); ///左邊的
        glTranslatef(-0.25,0.0,0);
        glRotatef (-angle,0,0,1) ;
        glTranslatef(-0.25,0,0);
        myCube();
        glPushMatrix();
            glTranslatef(-0.25,0.0,0);
            glRotatef (-angle,0,0,1) ;
            glTranslatef(-0.25,0,0);
            myCube();
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
    ///angle++ ; ///註解掉
}
void motion(int x,int y) ///新加入的mouse motion
{
    angle = x;
}
int main(int argc,char*argv[])
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week06");

    glutMotionFunc(motion); ///新加入的mouse motion
    glutDisplayFunc(display);
    glutIdleFunc(display);

    glutMainLoop();
}
#include <GL/glut.h>
float angle = 0 ;
void myCube() ///改函式
{
    glPushMatrix();
        glScalef(1,0.3,0.3); ///調大小
        glutSolidCube(0.5); ///正方塊
    glPopMatrix();
}
void display()
{
    glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glutSolidSphere(0.01,30,30); ///小球作為中心點

    glPushMatrix(); ///右邊的
        glTranslatef(0.25,0.0,0);
        glRotatef (angle,0,0,1) ;
        glTranslatef(0.25,0,0);
        myCube();
        glPushMatrix();
            glTranslatef(0.25,0.0,0);
            glRotatef (angle,0,0,1) ;
            glTranslatef(0.25,0,0);
            myCube();
        glPopMatrix();
    glPopMatrix();

    glPushMatrix(); ///左邊的
        glTranslatef(-0.25,0.0,0);
        glRotatef (-angle,0,0,1) ;
        glTranslatef(-0.25,0,0);
        myCube();
        glPushMatrix();
            glTranslatef(-0.25,0.0,0);
            glRotatef (-angle,0,0,1) ;
            glTranslatef(-0.25,0,0);
            myCube();
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
    ///angle++ ;
}
int oldX=0;
void mouse(int button,int state,int x,int y) ///mouse函式
{
    oldX=x;
}
void motion(int x,int y)
{
    angle +=(x-oldX); ///x-oldX 改變量
    oldX =x;
}
int main(int argc,char*argv[])
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week06");

    glutMotionFunc(motion); ///新加入的mouse motion
    glutMouseFunc(mouse); ///新加入的mouse函式
    glutDisplayFunc(display);
    glutIdleFunc(display);

    glutMainLoop();
}





沒有留言:

張貼留言