2020年4月21日 星期二

week08

glu/glut函式
#include <Gl/glut.h>
void arm()
{
    glPushMatrix();///備份
        glScalef(1, 0.3, 0.3);///x不變,y,z都變1/3
        glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;
int dx=5;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix(); ///右手
        glTranslatef(0.2,0.5,0); ///把下面正在以手肘為中心,轉動的手,掛到右上角去
        glRotatef(angle, 0,0,1); ///對Z軸旋轉///在對正中心做轉動,讓手肘好像時針一樣,掛在中心轉
        glTranslatef(0.25, 0, 0); ///把手肘(旋轉中心)放到畫面正中心
        glColor3f(1,0,0); arm(); ///畫紅色的手(上手臂)

        glPushMatrix();///備份
        glTranslatef(0.25,0,0);///把下面正在以手肘為中心,轉動的手,掛到右上角去
        glRotatef(angle, 0,0,1);///對Z軸旋轉///在對正中心做轉動,讓手肘好像時針一樣,掛在中心轉
        glTranslatef(0.25, 0, 0);///把手肘(旋轉中心)放到畫面正中心
        glColor3f(1,1,0); arm();///畫黃色的手(下手臂)
        glPopMatrix();///還原
    glPopMatrix();

        glPushMatrix();///左手
        glTranslatef(-0.2,0.5,0);
        glRotatef(-angle, 0,0,1);
        glTranslatef(-0.25, 0, 0);
        glColor3f(1,0,0); arm();

        glPushMatrix();
            glTranslatef(-0.25,0,0);
            glRotatef(-angle, 0,0,1);
            glTranslatef(-0.25, 0, 0);
            glColor3f(1,1,0); arm();
        glPopMatrix();
    glPopMatrix();

    angle+=dx;
    if(angle>60) dx=-1;
    if(angle<0) dx=+1;

    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}

沒有留言:

張貼留言