2020年4月21日 星期二

week09

這禮拜教glu/glut的含式,一樣從"六個旋轉圖形"開始

1.開啟後,進入程式碼分別找到第53行、第60行、第67行,依序為
       glutSolidSphere(1,slices,stacks);                         *(1)Solid為實心,換成Wire為空心
       glutSolidCone(1,1,slices,stacks);                          (2)Sphere是圓,Cone是圓錐,Torus是甜甜圈
       glutSolidTorus(0.2,0.8,slices,stacks)                     (3)Slices是直切,Stacks是橫切
  (4)甜甜圈的0.2、0.8分別代表最小、大圈直     徑, 把0.2改成0.4他會變胖




















2.試著做出旋轉的手臂
#include <Gl/glut.h>
void upper_arm()
{
     glPushMatrix();
        glScalef(1,0.3,0.3);
        glutSolidCube(0.5);
     glPopMatrix();
}
float angle=0; ///宣告等等要使用的旋轉角度
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
         glTranslatef(0.5,0.5,0);///step3.(***圖三與圖二的差別:把圖二的手移動到右上方)
        glRotatef(angle,0,0,1);///造成z軸旋轉
        glTranslatef(0.25,0,0);///step2.(***圖二與圖一的差別:改變旋轉的軸心)
        upper_arm();///step1.執行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();
}

圖一(上)、圖二(中),圖三(下)































3.左右手、上下臂


float angle=0; ///宣告等等要使用的旋轉角度
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    ///右手
    glPushMatrix();
        ///上手臂
        glTranslatef(0.2,0,0);///step3.把手移動到右上方
        glRotatef(angle,0,0,1);///造成z軸旋轉
        glTranslatef(0.25,0,0);///step2.改變旋轉的軸心
        upper_arm();///step1.執行upper_arm

        ///下手臂
        glPushMatrix();
        glTranslatef(0.25,0,0);///step3.把手移動到右上方
        glRotatef(angle,0,0,1);///造成z軸旋轉
        glTranslatef(0.25,0,0);///step2.改變旋轉的軸心
        upper_arm();///step1.執行upper_arm
        glPopMatrix();

    glPopMatrix();
    ///左手
    glPushMatrix();
        ///上手臂
        glTranslatef(-0.2,0,0);///step3.把手移動到右上方
        glRotatef(-angle,0,0,1);///造成z軸旋轉
        glTranslatef(-0.25,0,0);///step2.改變旋轉的軸心
        upper_arm();///step1.執行upper_arm

        ///下手臂
        glPushMatrix();
        glTranslatef(-0.25,0,0);///step3.把手移動到右上方
        glRotatef(-angle,0,0,1);///造成z軸旋轉
        glTranslatef(-0.25,0,0);///step2.改變旋轉的軸心
        upper_arm();///step1.執行upper_arm
        glPopMatrix();

    glPopMatrix();

    angle++;///增加旋轉角度,讓他一直轉
    glutSwapBuffers();
}


***左手的trans、rotate都要是負的,才能跟右手同步


沒有留言:

張貼留言