2021年3月31日 星期三

week06

選轉的小藍關節!!!

 #include <GL/glut.h> ///(0) 使用GLUT外掛 (忘了裝 GLUT)

float angle=0; ///TODO:

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空

    glPushMatrix();///TODO: 備份矩陣

    ///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉

        glRotatef(angle,0,0,1);對著中心轉動

        glScalef(0.5,0.1,0.1);把它變成細長的形狀

        glColor3f(0,0,1);把方塊上色變成藍色的

        glutSolidCube(1);用出一個方塊

    glPopMatrix(); ///TODO: 還原矩陣

    glutSwapBuffers();///交換兩倍的buffers

    angle++;

}

int main(int argc, char ** argv)

{

    glutInit( &argc, argv ); ///(1) GLUT初始設定

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式

    glutCreateWindow("08160011我是神奇的小葉同學");///(3)開窗

   glutDisplayFunc(display);///(4)等一下要顯示的函式

    glutIdleFunc(display );///TODO2: mouse motion在動哦!!!!

    glutMainLoop();///(5)主要迴圈

}



但現在是以中心為主在轉動的,所以我們要改變我們的中心位置

{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空

    glPushMatrix();///TODO: 備份矩陣
        ///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);把關節移動到中心
        glScalef(0.5,0.1,0.1);
        glColor3f(0,0,1);
        glutSolidCube(1);
    glPopMatrix(); ///TODO: 還原矩陣
    glutSwapBuffers();///交換兩倍的buffers
    angle++;
}


要讓首首到右上方 肩膀的位置轉動
void hand(){
    glPushMatrix();
    glScalef(0.5,0.1,0.1);
    glColor3f(0,0,1);
    glutSolidCube(1);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
    glColor3f(1,1,1); glutSolidCube(1);加一個白色身體的方塊 看起來比較像身體
    glPushMatrix();///TODO: 備份矩陣
        ///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
        glTranslatef(0.5,0.5,0);整個一道右上角掛著
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0.1,0.1);
        glScalef(0.5,0.1,0.1);
        glColor3f(0,0,1);
        glutSolidCube(1);
    glPopMatrix(); ///TODO: 還原矩陣
    glutSwapBuffers();///交換兩倍的buffers
    angle++;
}


把身體的部分縮小,手的部分再多一節


void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
    glColor3f(1,1,1); glutSolidCube(0.5);把身體的部分縮小不然太大會看不到新用的手臂
    glPushMatrix();///TODO: 備份矩陣
        ///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
        glTranslatef(0.25,0.25,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0.1,0.1);
        hand();
        glPushMatrix();
            glTranslatef(0.25,0,0);整個移動到右上方掛著
            glRotatef(angle,0,0,1);對中心轉動
            glTranslatef(0.25,0,0);把關節移動到中心
            hand();細長藍色的小手手
        glPopMatrix();
    glPopMatrix(); ///TODO: 還原矩陣
    glutSwapBuffers();///交換兩倍的buffers
    angle++;
}

現在要來做兩隻手臂喊小手手,把右手臂的程式複製然後把前面的部分加上負號
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
    glColor3f(1,1,1); glutSolidCube(0.5);
    glPushMatrix();///右半邊
        ///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
        glTranslatef(0.25,0.25,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0.1,0.1);
        hand();
        glPushMatrix();
            glTranslatef(0.25,0,0);
            glRotatef(angle,0,0,1);
            glTranslatef(0.25,0,0);
            hand();
        glPopMatrix();
    glPopMatrix();
左手的部分
    glPushMatrix();///左半邊     
        ///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
        glTranslatef(-0.25,0.25,0);
        glRotatef(-angle,0,0,1);
        glTranslatef(-0.25,0.1,0.1);
        hand();
        glPushMatrix();
            glTranslatef(-0.25,0,0);
            glRotatef(-angle,0,0,1);
            glTranslatef(-0.25,0,0);
            hand();///下手臂/手
        glPopMatrix();
    glPopMatrix(); ///TODO: 還原矩陣
    glutSwapBuffers();///交換兩倍的buffers
    angle++;
}


沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...