第一節課 練習TRT
glPushMatrix();///開始
glTranslatef(x,y,z);///最後移回去
glRotatef(角度,x,y,z);///後轉動
glTranslatef(x,y,z);///先移動
drawHand();///畫個手手
glPopMatrix();///結束
大概像這樣的應用
第二節課 開始階級制度
像手臂一樣大臂動小臂也會動
開始人體蜈蚣囉~
///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();
}
第三節課 依樣畫葫蘆 畫出左右手
程式碼:
///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();
}
沒有留言:
張貼留言