2020年4月21日 星期二

第八(九?)週做平面機器手臂ㄉ卡小

打開那6個形狀的project
Sphere是圓球
Cone是錐形
Torus是圈圈
更改數值來改變形狀

今天要自己動手做ㄉ事!

我們要做ㄍ機器人啦!
先把程式碼都刪掉
然後重新打上新的程式碼
先丟給你們辣!

#include <GL/glut.h>

void upper_arm(){
    glPushMatrix();///備份
        glScalef(1,0.3,0.3);///x不變,y,z變0.3
        glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份
        glRotatef(angle,0,0,1);///對z軸旋轉
        upper_arm();
        glPopMatrix();///還原
    angle++;

    glutSwapBuffers();
}

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

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Weeeeeeeeeeeeeek09?");

    glutDisplayFunc(display);
    glutIdleFunc(display);


    glutMainLoop();
}

做ㄍ長方形ㄉ圖案
然後讓他轉圈圈

大概就長醬子
可是是會轉動的


但這樣子轉動的話會是對著正中心轉動
我們希望他能跟機械手臂一樣

原本:
 變成:
輸入程式碼讓方塊移動

移動手肘

先移動手軸位置
再移動旋轉的重心

都了解之後就來做手臂辣!

這是我們要做出來ㄉ東西
484感覺很膩害很想做啊( σ՞ਊ ՞)σ 

給你們程式碼
#include <GL/glut.h>
void upper_arm(){
    glPushMatrix();///備份
        glScalef(1,0.3,0.3);///x不變,y,z變0.3
        glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;///TODO
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

///這邊要注意矩陣所包含的範圍!
    glPushMatrix();///右手 矩陣 
        glColor3ub(25,90,201);
        ///對正中心做移動旋轉
        glTranslatef(0.35,0,0);///TODO3:把下面以手肘為中心 轉動的手掛在右上方
        glRotatef(angle,0,0,1);///對z軸旋轉 TODO
        glTranslatef(0.23,0,0);///TODO2:把想要旋轉的中心放到正中心
        upper_arm();///右手臂

            glPushMatrix();///備份矩陣
                glColor3ub(25,250,0);
                ///對手臂做移動旋轉
                glTranslatef(0.22,0,0);///TODO3:把下面以手肘為中心 轉動的手掛在右上方
                glRotatef(angle,0,0,1);///對z軸旋轉 TODO
                glTranslatef(0.23,0,0);///TODO2:把想要旋轉的中心放到正中心
                upper_arm();///右手肘
            glPopMatrix();///還原矩陣

    glPopMatrix();///還原矩陣

    glPushMatrix();///左手 備份矩陣
        glColor3ub(25,90,201);
        ///對正中心做移動旋轉
        glTranslatef(-0.35,0,0);///TODO3:把下面以手肘為中心 轉動的手掛在右上方
        glRotatef(-angle,0,0,1);///對z軸旋轉 TODO
        glTranslatef(-0.23,0,0);///TODO2:把想要旋轉的中心放到正中心
        upper_arm();///左手臂

            glPushMatrix();///備份矩陣
                glColor3ub(25,250,0);
                ///對手臂做移動旋轉
                glTranslatef(-0.22,0,0);///TODO3:把下面以手肘為中心 轉動的手掛在右上方
                glRotatef(-angle,0,0,1);///對z軸旋轉 TODO
                glTranslatef(-0.23,0,0);///TODO2:把想要旋轉的中心放到正中心
                upper_arm();///左手肘
            glPopMatrix();///還原矩陣

    glPopMatrix();///還原矩陣

    angle++;///TODO

    glutSwapBuffers();
}

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

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Weeeeeeeeeeeeeek09?");

    glutDisplayFunc(display);
    glutIdleFunc(display);///TODO


    glutMainLoop();
}

讓手臂轉動特定角度

就是打上面那樣辣!
這ㄍ程式碼不難,給我自己打
別忘ㄌ宣告dx哦!( • ̀ω•́ )



沒有留言:

張貼留言