2023年3月22日 星期三

Week-06

 Week-06

來做一個會旋轉的茶壺

#include <GL/glut.h>
float angle = 0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清理背景不清會有殘影


    glutSolidSphere(0.05, 30, 30);///創一個glutSolidSphere來輔助

    glPushMatrix();


        glRotatef(angle, 0, 0, 1);/// step02,開始旋轉
        glTranslatef(0.46, -0.05, 0);/// step1把茶壺移到中心點,可創一個glutSolidSphere來輔助
        glutSolidTeapot(0.3);
    glPopMatrix();

glutSwapBuffers();
angle++;///把角度++
}


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

    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.05, 30, 30);

    glutSolidTeapot(0.3);///step01,在上一個程式新增茶壺

    glPushMatrix();
        glTranslatef(0.49, 0.13, 0);///step02,把那個會旋轉的茶壺往茶壺嘴移動
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.46, -0.05, 0);///移到中心點
        glutSolidTeapot(0.3);
    glPopMatrix();

glutSwapBuffers();
angle++;///把角度++
}


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

    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.05, 30, 30);

    glutSolidTeapot(0.3);
    glPushMatrix();

        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("GLUT Shapes");

    glutDisplayFunc(display);
    glutIdleFunc(display);///清畫面
    glutMainLoop();
}
#include <GL/glut.h>
float angle = 0;

void drawHand()///創一個drawHand的函式
{
    glPushMatrix();
        glScaled(1, 0.3, 0.3);///調整其大小x不變,y、z縮小
        glutSolidCube(0.5);

    glPopMatrix();

}

void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清理背景不清會有殘影

    glPushMatrix();///即便有函式還是要push,pop
        glRotatef(angle, 0, 0, 1);///開始旋轉
        glTranslatef(0.25, 0, 0);///應為Cube的x是0.5,所以往右移0.25到中心點,這樣就是從邊邊轉而不是中心那邊轉
        drawHand();
    glPopMatrix();

glutSwapBuffers();
angle++;///把角度++
}


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

    glutDisplayFunc(display);
    glutIdleFunc(display);///清畫面
    glutMainLoop();
}
做手臂

#include <GL/glut.h>
float angle = 0;

void drawHand()
{
    glPushMatrix();
        glScaled(1, 0.3, 0.3);
        glutSolidCube(0.5);

    glPopMatrix();

}

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

    glPushMatrix();

        ///glRotatef(angle, 0, 0, 1);///先註解掉是為了要讓你觀察一開始的情況
        ///glTranslatef(0.25, 0, 0);///
        drawHand();

        glPushMatrix();///這邊是有再轉的
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            drawHand();
        glPopMatrix();

    glPopMatrix();

glutSwapBuffers();
angle++;///把角度++
}


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

    glutDisplayFunc(display);
    glutIdleFunc(display);///清畫面
    glutMainLoop();
}
把手臂跟手走掛上去
#include <GL/glut.h>
float angle = 0;

void drawHand()
{
    glPushMatrix();
        glScaled(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);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        drawHand();

        glPushMatrix();///右上走
            glTranslatef(0.25, 0, 0);///掛上去
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            drawHand();
        glPopMatrix();

    glPopMatrix();

glutSwapBuffers();
angle++;///把角度++
}


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

    glutDisplayFunc(display);
    glutIdleFunc(display);///清畫面
    glutMainLoop();
}
把左邊手也做出來

#include <GL/glut.h>
float angle = 0;

void drawHand()
{
    glPushMatrix();
        glScaled(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);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        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);
        drawHand();

        glPushMatrix();///左上走
            glTranslatef(-0.25, 0, 0);///掛上去
            glRotatef(angle, 0, 0, 1);
            glTranslatef(-0.25, 0, 0);
            drawHand();
        glPopMatrix();

    glPopMatrix();


glutSwapBuffers();
angle++;///把角度++
}


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

    glutDisplayFunc(display);
    glutIdleFunc(display);///清畫面
    glutMainLoop();
}
















沒有留言:

張貼留言