2020年4月21日 星期二

week08隨便寫寫

今天教了轉動,移動
以下城市可以讓物體轉動
#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();///備份
        glScalef(1, 0.3, 0.3);///x不變,y,z都變1/3
        glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份
        glRotatef(angle, 0,0,1);///對z軸轉
        upper_arm();///用函式呼叫自己寫的程式
    glPopMatrix();///還原
    angle++;
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}
如果把glTranslatef(0.25, 0, 0);+到glRotatef(angle, 0,0,1);底下就可以改中心旋轉
#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();///備份
        glScalef(1, 0.3, 0.3);///x不變,y,z都變1/3
        glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份
        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("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}
機器人的手
#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;
float dx=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份
        glTranslatef(0.3, 0.3, 0);///把下面正在以手軸慛中心,轉動的手,掛到右上角去
        glRotatef(angle, 0,0,1);///對z軸轉 再對正中心做轉動,讓手軸好像時針一樣,掛在中心軸
        glTranslatef(0.19, 0, 0);///把手軸(旋轉中心)放到畫面正中心
        glColor3f(1,0,0);arm();///畫手

        glTranslatef(0.3, 0, 0);///把下面正在以手軸慛中心,轉動的手,掛到右上角去
        glRotatef(angle, 0,0,1);///對z軸轉 再對正中心做轉動,讓手軸好像時針一樣,掛在中心軸
        glTranslatef(0.19, 0, 0);///把手軸(旋轉中心)放到畫面正中心
        glColor3f(1,1,0);arm();///畫手
    glPopMatrix();

    glPushMatrix();
        glTranslatef(-0.3, 0.3, 0);///把下面正在以手軸慛中心,轉動的手,掛到右上角去
        glRotatef(-angle, 0,0,1);///對z軸轉 再對正中心做轉動,讓手軸好像時針一樣,掛在中心軸
        glTranslatef(-0.19, 0, 0);///把手軸(旋轉中心)放到畫面正中心
        glColor3f(1,0,1);arm();///畫手

        glTranslatef(-0.3, 0, 0);///把下面正在以手軸慛中心,轉動的手,掛到右上角去
        glRotatef(-angle, 0,0,1);///對z軸轉 再對正中心做轉動,讓手軸好像時針一樣,掛在中心軸
        glTranslatef(-0.19, 0, 0);///把手軸(旋轉中心)放到畫面正中心
        glColor3f(0,1,0);arm();///畫手

    glPopMatrix();///還原
    angle+=dx;                                angle++;只寫這個的話會一直旋轉
    if(angle>90) dx-=1;
    if(angle<=0) dx+=1;這三行他會固定轉到90度
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}

沒有留言:

張貼留言