2023年3月22日 星期三

愛喝奶茶的石靈-Week06 考試ˊ 口ˋ

 第一節課 練習TRT

弄個圓點 放個茶壺開始轉
主要使用

glPushMatrix();///開始

    glTranslatef(x,y,z);///最後移回去

    glRotatef(角度,x,y,z);///後轉動

    glTranslatef(x,y,z);///先移動

    drawHand();///畫個手手

glPopMatrix();///結束

大概像這樣的應用

第二節課 開始階級制度

像手臂一樣大臂動小臂也會動

開始人體蜈蚣囉~

真D噁心 三個茶壺版本
程式碼:

///week06-2 robot-hierarchy階級制度 改自06-1

#include <GL/glut.h>

float angle = 0; ///step02-1 宣告global全域變數 angle

void display()

{

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glutSolidSphere(0.02,30,30);


    glutSolidTeapot(0.3);///02-1身體


    glPushMatrix();


        glTranslatef(0.49,0.13,0);///02-2新的手

        glRotatef(angle,0,0,1);///(2)轉

        glTranslatef(0.46,-0.05,0);///(1)移到中心

        glutSolidTeapot(0.3);


        glPushMatrix();



            glTranslatef(0.49,0.13,0);///02-2新的手

            glRotatef(angle,0,0,1);///(2)轉

            glTranslatef(0.46,-0.05,0);///(1)移到中心

            glutSolidTeapot(0.3);

        glPopMatrix();

    glPopMatrix();






    glutSwapBuffers();

    angle++;

}

int main(int argc, char* argv[] )

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week04");


    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();

}

藍色是茶壺的部分 記得越底下的才可以影響越上面的

第三節課 依樣畫葫蘆 畫出左右手

你看 手手o wo

程式碼:

///week06-3 robot-arm

///畫出大的身體、畫出手臂

#include <GL/glut.h>

float angle = 0;

void drawHand()

{

    glPushMatrix();

        glScalef(1, 0.3, 0.3);

        glutSolidCube(0.5);

    glPopMatrix();

}

void display()

{

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); ///清背景


    glPushMatrix();///右手

        ///(3) 要掛上去

        glTranslatef(0.25, 0, 0);

        glRotatef(angle, 0,0,1);  ///(2) 轉動

        glTranslatef(0.25, 0, 0); ///(1) 把中心,放在正中心

        drawHand();

        glPushMatrix();

        ///(3) 要掛上去

            glTranslatef(0.25, 0, 0);

            glRotatef(angle, 0,0,1);  ///(2) 轉動

            glTranslatef(0.25, 0, 0); ///(1) 把中心,放在正中心

            drawHand();

        glPopMatrix();

    glPopMatrix();


    glPushMatrix();///左手

        ///(3) 要掛上去

        glTranslatef(-0.25, 0, 0);

        glRotatef(angle, 0,0,1);  ///(2) 轉動

        glTranslatef(-0.25, 0, 0); ///(1) 把中心,放在正中心

        drawHand();

        glPushMatrix();

        ///(3) 要掛上去

            glTranslatef(-0.25, 0, 0);

            glRotatef(angle, 0,0,1);  ///(2) 轉動

            glTranslatef(-0.25, 0, 0); ///(1) 把中心,放在正中心

            drawHand();

        glPopMatrix();

    glPopMatrix();



    glutSwapBuffers();

    angle++; ///step02-1 把角度++

}

int main(int argc, char* argv[] )

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week04");


    glutDisplayFunc(display);

    glutIdleFunc(display); ///step02-1 有空idle時,就重畫畫面

    glutMainLoop();

}


沒有留言:

張貼留言