2020年5月18日 星期一

WEEK8

改Sphere,Cone,Torus參數改變大小
旋轉圖形製作關節
#include <GL/glut.h>
void upper_arm()
{
    glPushMatrix();
        glScaled(1,0.3,0.3);///x不變,y,z都變1/3
        glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;///todo
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
        glTranslated(0.5,0.5,0);///todo3把下面轉動的手掛到右上角
        glRotated(angle,0,0,1);///對z軸旋轉///todo
        glTranslated(0.25,0,0);///todo2加這一行對正中心轉
        upper_arm();///用函式呼叫
    glPopMatrix();
    angle++;///todo
    glutSwapBuffers();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);///todo
    glutDisplayFunc(display);
    glutMainLoop();
}
有兩個關節的手
#include <GL/glut.h>
void arm()
{
    glPushMatrix();
        glScaled(1,0.3,0.3);///x不變,y,z都變1/3
        glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;///todo
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///右手
        glTranslatef(0.2,0,0);///todo3把下面轉動的手掛到右上角
        glRotatef(angle,0,0,1);///對z軸旋轉///todo
        glTranslatef(0.25,0,0);///todo2
        glColor3f(1,0,0);arm();///畫紅色的手(up)

        glPushMatrix();///備份
            glTranslatef(0.25,0,0);///todo3把下面轉動的手掛到右上角
            glRotatef(angle,0,0,1);///對z軸旋轉///todo
            glTranslatef(0.25,0,0);///todo2
            glColor3f(1,1,0);arm();///畫黃色的手(down)
        glPopMatrix();///還原
    glPopMatrix();
    glPushMatrix();///左手
            glTranslatef(-0.2,0,0);///todo3把下面轉動的手掛到右上角
            glRotatef(-angle,0,0,1);///對z軸旋轉///todo
            glTranslatef(-0.25,0,0);///todo2
            glColor3f(1,0,0);arm();///畫紅色的手(up)

        glPushMatrix();///備份
            glTranslatef(-0.25,0,0);///todo3把下面轉動的手掛到右上角
            glRotatef(-angle,0,0,1);///對z軸旋轉///todo
            glTranslatef(-0.25,0,0);///todo2
            glColor3f(1,1,0);arm();///畫黃色的手(down)
        glPopMatrix();///還原
    glPopMatrix();
    angle++;///todo
    glutSwapBuffers();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);///todo
    glutDisplayFunc(display);
    glutMainLoop();
}



沒有留言:

張貼留言