2020年4月26日 星期日

week08

期中考
glPushMatrix(); ///備份矩陣
  glTranslatef(x,y,z); //移動
  glRotatef(angle,x,y,z); //轉動
  glScalef(x,y,z); //縮放

glBegin(GL_POLYGON); //開始畫
  glColor3f(r,g,b); //顏色
  glTexCoord2f(tx,ty); //貼圖大小
  glNormal3f(nx,ny,nz); //法向量
  glVertex3f(x,y,z); //頂點
glEnd(); //結束

glPopMatrix(); //還原矩陣

==============================================================

glutSolidSphere
glutSolidCone
glutSolidTorus

==============================================================


↑↑ TODO 正中心轉動


↑↑ TODO2 移動轉動點


↑↑ TODO3 將轉動的手掛到右上角


#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; ///TODO:
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軸旋 
                                             ///TODO: 再對正中心做轉動,讓手肘好像時針一樣,掛在 中心轉
        glTranslatef(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(); ///備份
        glScalef(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軸旋 ///
        glTranslatef(0.25,0,0);
        glColor3f(1,0,0); arm(); ///畫紅色的手

        glPushMatrix(); ///備份
            glTranslatef(0.25,0,0); ///TODO3: 把下面正在以手肘為中心,轉動的手,掛到右上角去
            glRotatef(angle,0,0,1); ///對z軸旋 ///
            glTranslatef(0.25,0,0);
            glColor3f(1,1,0); arm(); ///畫黃色的手
        glPopMatrix();///還原
    
    glPopMatrix();///還原

    

    glPushMatrix(); ///備份
        glTranslatef(-0.2,0,0); ///TODO3: 把下面正在以手肘為中心,轉動的手,掛到右上角去
        glRotatef(-angle,0,0,1); ///對z軸旋 ///
        glTranslatef(-0.25,0,0);
        glColor3f(1,0,0); arm(); ///畫紅色的手

        glPushMatrix(); ///備份
            glTranslatef(-0.25,0,0); ///TODO3: 把下面正在以手肘為中心,轉動的手,掛到右上角去
            glRotatef(-angle,0,0,1); ///對z軸旋 ///
            glTranslatef(-0.25,0,0);
            glColor3f(1,1,0); arm(); ///畫黃色的手
        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();
}

==============================================================


float宣告dx=1
最後一行 glPopMatrix(); 之後

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








沒有留言:

張貼留言