2023年3月23日 星期四

m week06

 week06

step01-1

開新檔案
week06-1_TRT_robot02_teapot
刪除原來的程式
打開上週的程式week05-2並貼上


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



把茶壺掛上去
#include <GL/glut.h>
float angle =0;


void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidSphere(0.01 ,30, 30);///小球做中心點參考

    glPushMatrix();
        glTranslatef(0.5, 0.5, 0);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.45, 0, 0);
        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_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.5, 0.5, 0);
        ///glRotatef(angle, 0, 0, 1);
        ///glTranslatef(0.45, 0, 0);
        myCube();
    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();
}

改變旋轉軸和旋轉
#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.5, 0.5, 0);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        myCube();
    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();
}



改變掛的位置
#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);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        myCube();
    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();
}

增加一個方塊並掛在一起
#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);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        myCube();
        glPushMatrix();
                glTranslatef(0.25, 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();
}

step02-3

新增專案 week06-3_TRT_robot4_arm_hand_right_left
複製 week06-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);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        myCube();///上手臂
        glPushMatrix();
                glTranslatef(0.25, 0, 0);
                glRotatef(angle, 0, 0, 1);
                glTranslatef(0.25, 0, 0);
                myCube();///下手肘
        glPopMatrix();
    glPopMatrix();

    glPushMatrix();///左邊的
        glTranslatef(-0.25, 0, 0);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(-0.25, 0, 0);
        myCube();///上手臂
        glPushMatrix();
                glTranslatef(-0.25, 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();
}

step03-1

新增一個專案 week06-4_TRT_robot5_mouse_motion_angle
刪除程式碼
貼上week06-3程式碼
改變左手臂旋轉角度並且用滑鼠控制手臂
#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);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        myCube();///上手臂
        glPushMatrix();
                glTranslatef(0.25, 0, 0);
                glRotatef(angle, 0, 0, 1);
                glTranslatef(0.25, 0, 0);
                myCube();///下手肘
        glPopMatrix();
    glPopMatrix();

    glPushMatrix();///左邊的
        glTranslatef(-0.25, 0, 0);
        glRotatef(-angle, 0, 0, 1);
        glTranslatef(-0.25, 0, 0);
        myCube();///上手臂
        glPushMatrix();
                glTranslatef(-0.25, 0, 0);
                glRotatef(-angle, 0, 0, 1);
                glTranslatef(-0.25, 0, 0);
                myCube();///下手肘
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
    ///angle++;
}
void motion(int x, int y)
{
    angle = x;
}

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

glutMotionFunc(motion);
glutDisplayFunc(display);
glutIdleFunc(display);

glutMainLoop();
}

step03-2

https://jsyeh.org/gl 練習

沒有留言:

張貼留言