1.複習小考:
新增Project :選擇GLUT projectGo / Next / 先設定存放位置 / 再更改檔案名稱week06-1_TRT_robot2 / 小葉老師上課軟體 / freeglut檔案複製到桌面 / 將libfreeglut.a複製貼上後改成libglut32.a
#include <GL/glut.h>float angle =0;void display(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glutSolidSphere(0.02,30,30);///正中心的圓球glPushMatrix();glTranslatef(0.5,0.5,0);///放到正確位置glRotatef(angle,0,0,1);///旋轉glTranslatef(0.46,-0.05,0);///旋轉中心放到世界的中心glutSolidTeapot(0.3);glPopMatrix();
glutSwapBuffers();angle++;}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutCreateWindow("week06");glutDisplayFunc(display);glutIdleFunc(display);glutMainLoop();}
2.雙層旋轉移動(茶壺)
開啟第二個Project / week06-2_TRT_robot_hierarchy / 由week06-1的程式碼來更改 / 增加一個茶壺當身體 / 並將原茶壺掛到身體的壺嘴
加入第二階的旋轉
#include <GL/glut.h>float angle =0;void display(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///glutSolidSphere(0.02,30,30);///中心點glutSolidTeapot(0.3);///身體茶壺glPushMatrix();glTranslatef(0.49,0.13,0);///掛到身體茶壺的壺嘴glRotatef(angle,0,0,1);glTranslatef(0.46,-0.05,0);glutSolidTeapot(0.3);///上手臂茶壺
glPushMatrix();glTranslatef(0.49,0.13,0);///掛在上手臂茶壺的壺嘴glRotatef(angle,0,0,1);glTranslatef(0.46,-0.05,0);glutSolidTeapot(0.3);///下手臂茶壺glPopMatrix();
glPopMatrix();glutSwapBuffers();angle++;}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutCreateWindow("week06");glutDisplayFunc(display);glutIdleFunc(display);glutMainLoop();}
3.雙層旋轉移動(手臂)
開啟第三個Project / 專案名稱:week06-3_TRT_robot_hierarchy / 由上週程式碼week05-2_TRT_robots拿來改 / 用函數畫手臂並讓它旋轉
#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();///右手臂glTranslatef(0.25,0,0);///掛回去glRotatef(angle,0,0,1);glTranslatef(0.25,0,0);drawHand();///畫上手臂glPushMatrix();glTranslatef(0.25,0,0);///掛回去glRotatef(angle,0,0,1);glTranslatef(0.25,0,0);drawHand();///畫下手臂glPopMatrix();glPopMatrix();glPushMatrix();///左手臂glTranslatef(-0.25,0,0);///掛回去glRotatef(angle,0,0,1);glTranslatef(-0.25,0,0);drawHand();///畫上手臂glPushMatrix();glTranslatef(-0.25,0,0);///掛回去glRotatef(angle,0,0,1);glTranslatef(-0.25,0,0);drawHand();///畫下手臂glPopMatrix();glPopMatrix();glutSwapBuffers();angle++;}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutCreateWindow("week06");glutDisplayFunc(display);glutIdleFunc(display);glutMainLoop();}







沒有留言:
張貼留言