2020年4月21日 星期二

0888888888888888888888888888


第八周

框框係數可以改變他們的大小

接下來我們要試著讓方塊旋轉

程式碼:
#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();
    glScalef(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;///Do
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
        glRotatef(angle,0,0,1);///對z軸旋轉///Do
        upper_arm();///用函式呼叫自己寫的程式
   glPopMatrix();
   angle++; ///Do
    glutSwapBuffers();
}
int main(int argc, char**argv)
{

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE| GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);///Do
    glutDisplayFunc(display);
    glutMainLoop();
}


再來我們要試著讓方塊對著一個點旋轉




#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();
    glScalef(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;///Do
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
        glRotatef(angle,0,0,1);///對z軸旋轉///Do
        glTranslatef(0.25,0,0);///Do2
        upper_arm();///用函式呼叫自己寫的程式
   glPopMatrix();
   angle++; ///Do
    glutSwapBuffers();
}
int main(int argc, char**argv)
{

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE| GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);///Do
    glutDisplayFunc(display);
    glutMainLoop();
}









本周重點T - R - T


#include <GL/glut.h>
void upper_arm()
{
    glPushMatrix(); ///備份
        glScalef(1, 0.3 , 0.3); ///y,z變1/3
        glutSolidCube(0.5);
    glPopMatrix();   ///還原
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();  ///備份
        glTranslatef(0.5, 0.5, 0); ///Todo3: 把轉動的手放到右上角
        glRotatef(angle, 0, 0, 1);   ///對Z軸做旋轉 ///對正中心做轉動
        glTranslatef(0.25,0,0);   ///把旋轉中心放到畫面中間
        upper_arm(); ///呼叫自己寫的程式
    glPopMatrix();   ///還原
    angle++;
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week08");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}


#include <GL/glut.h>
void arm()
{
    glPushMatrix(); ///備份
        glScalef(1, 0.3 , 0.3); ///y,z變1/3
        glutSolidCube(0.5);
    glPopMatrix();   ///還原
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();  ///右手
        glTranslatef(0.2, 0, 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();   ///還原
    glPushMatrix();  ///左手
        glTranslatef(-0.2, 0, 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<10) dx=1;

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

沒有留言:

張貼留言