2020年4月21日 星期二

話機完啦

電腦圖學 第08週 2020-04-21
1. 期中考: OpenGL必背10函式 (老師有模擬考系統 http://120.96.99.55 )
 2. 主題: glu/glut函式
 4. 階層式移動、階層式轉動
5. T-R-T (像關節一樣的)轉動
6. 下週小考(機器人的關節轉動)、下下週交作業(簡單的機器人)

-----------------------------------------------------------(我是分隔線)

1.將一個物品旋轉

程式碼:
#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();///備份
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("week09-1");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}

2.更換轉動的軸心點到中間

程式碼:
多了一行
glTranslatef(0.25,0,0);///TODO 2

3.將物品移到右上方旋轉


移到右上方的話就要再加入一行程式碼:

glTranslatef(0.5,0.5,0);///todo3:將以中心旋轉的物品掛到右上角

4.弄出兩隻手在轉

程式碼:
#include<Gl/glut.h>
void 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();///備份(右手1)
glTranslatef(0.2,0,0);///把下面正在以手軸為中心,轉動的手掛到右上角去(整體包括世界移到右
glRotatef(angle,0,0,1);///對z軸旋轉。再對正中心做轉動(開轉)
glTranslatef(0.25,0,0);///將整個物品做移動(單獨移動物件,世界不動)
glColor3f(1,0,0);///Red
arm();
glPushMatrix();///備份(右手2)
glTranslatef(0.25,0,0);///把下面正在以手軸為中心,轉動的手掛到右上角去(整體包括世界移到
glRotatef(angle,0,0,1);///對z軸旋轉。再對正中心做轉動(開轉)
glTranslatef(0.25,0,0);///將整個物品做移動(單獨移動物件,世界不動)
glColor3f(1,1,0);///Yellow
arm();
glPopMatrix();///還原矩陣(右手2)
glPopMatrix();///還原矩陣(右手1)
glPushMatrix();///備份(左手1)
glTranslatef(-0.2,0,0);///把下面正在以手軸為中心,轉動的手掛到右上角去(整體包括世界移到右
glRotatef(-angle,0,0,1);///對z軸旋轉。再對正中心做轉動(開轉)
glTranslatef(-0.25,0,0);///將整個物品做移動(單獨移動物件,世界不動)
glColor3f(1,0,0);///Red
arm();
glPushMatrix();///備份(左手2)
glTranslatef(-0.25,0,0);///把下面正在以手軸為中心,轉動的手掛到右上角去(整體包括世界移
glRotatef(-angle,0,0,1);///對z軸旋轉。再對正中心做轉動(開轉)
glTranslatef(-0.25,0,0);///將整個物品做移動(單獨移動物件,世界不動)
glColor3f(1,1,0);///Yellow
arm();
glPopMatrix();///還原矩陣(左手2)
glPopMatrix();///還原矩陣(左手1)
angle++;///角度增加
glutSwapBuffers();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week09-1");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}





沒有留言:

張貼留言