2020年4月21日 星期二

week09

今天考了GL的10種涵式 共11行
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);//打光的法向量
    glVertex2f(x,y);//頂點
  glEnd();//結束畫
glPopMatrix();//還原矩陣


--------------------------------------------------------------------------------------------------------------------------

練習一
開啟CODEBLOCK建立一個新的glut專案,嘗試調整glutSolid的參數去改變形狀
如圖,我改了實心cone的參數

以下為修改glutSolid參數的位子

--------------------------------------------------------------------------------------------------------------------------

開始今天的第一個程式
做出一個旋轉的長方形


程式碼如下

#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);///可以改變旋轉位子
        glRotatef (angle, 0,0,1); ///Z軸旋轉///TODO:
        glTranslatef(0.2,0,0);///可以改變旋轉軸心
        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();
}

加入glTranslatef(0.2,0,0);同上

--------------------------------------------------------------------------------------------------------------------------

加入上下臂做手臂,做出左右手
如圖

程式碼:

#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.2,0,0);///可以改變旋轉位子
        glRotatef (angle, 0,0,1); ///Z軸旋轉///TODO:
        glTranslatef(0.25,0,0);///可以改變旋轉軸心
        glColor3f(1,0,0);///畫紅色的手(上手臂)
        upper_arm() ;///用函式呼叫自己寫的程式
        glPushMatrix();///備份
            glTranslatef(0.25,0,0);///可以改變旋轉位子
            glRotatef (angle, 0,0,1); ///Z軸旋轉///TODO:
            glTranslatef(0.25,0,0);///可以改變旋轉軸心
            glColor3f(1,1,0);///畫黃色的手(下手臂)
            upper_arm() ;///用函式呼叫自己寫的程式
        glPopMatrix (); ///還原
    glPopMatrix (); ///還原
    glPushMatrix();///備份(左手)
        glTranslatef(-0.2,0,0);///可以改變旋轉位子
        glRotatef (-angle, 0,0,1); ///Z軸旋轉///TODO:
        glTranslatef(-0.25,0,0);///可以改變旋轉軸心
        glColor3f(1,0,0);///畫紅色的手(上手臂)
        upper_arm() ;///用函式呼叫自己寫的程式
        glPushMatrix();///備份
            glTranslatef(-0.25,0,0);///可以改變旋轉位子
            glRotatef (-angle, 0,0,1); ///Z軸旋轉///TODO:
            glTranslatef(-0.25,0,0);///可以改變旋轉軸心
            glColor3f(1,1,0);///畫黃色的手(下手臂)
            upper_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();
}





沒有留言:

張貼留言