*旋轉再移動(由下往上看)
-原地自轉
-

*移動再旋轉(由下往上看)
- -繞著中心點公轉
-

*從下往上看
-

*自轉VS公轉
-自轉
-

-公轉
-

*建立一個茶壺
-#include <GL/glut.h> ///使用GLUT外掛
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);///茶壺大小0.3
glutSwapBuffers();
}
int main(int argc , char**argv) ///進階的main()參數(個數,字串)
{
glutInit(&argc,argv); ///進階參數,初始GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); ///開起2種模式
glutCreateWindow("05160965"); ///盡量不要用中文
glutDisplayFunc(display);
glutMainLoop(); ///主要迴圈
}
-

*建立一個會轉動的茶壺
-float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();///備份矩陣(乾淨的矩陣)
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///茶壺大小0.3
glPopMatrix();///還原矩陣
glutSwapBuffers();
}
void motion(int x,int y)
{
angle=x;///較不優的方法
glutPostRedisplay();///請動畫重畫
}
-

*建立兩個會轉動的茶壺
-void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();///備份矩陣(乾淨的矩陣)
glutSolidTeapot(0.3);///放在中間
glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPopMatrix();///還原矩陣
glutSwapBuffers();
}
-

*建立三個會轉動的茶壺
-void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();///備份矩陣(乾淨的矩陣)
glutSolidTeapot(0.3);///放在中間
glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPushMatrix();///備份矩陣
glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPopMatrix();///還原矩陣
glPopMatrix();///還原矩陣
glutSwapBuffers();
}
-

*建立很多個會轉動的茶壺
-glPushMatrix();///上手臂
glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPushMatrix();///下手肘
glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPopMatrix();///還原矩陣
glPopMatrix();///還原矩陣
glPushMatrix();///上手臂
glTranslatef(-0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(-0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPushMatrix();///下手肘
glTranslatef(-0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(-0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPopMatrix();///還原矩陣
glPopMatrix();///還原矩陣
-

*程式碼
-#include <GL/glut.h> ///使用GLUT外掛
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();///備份矩陣(乾淨的矩陣)
glutSolidTeapot(0.3);///放在中間
glPushMatrix();///上手臂
glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPushMatrix();///下手肘
glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPopMatrix();///還原矩陣
glPopMatrix();///還原矩陣
glPushMatrix();///上手臂
glTranslatef(-0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(-0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPushMatrix();///下手肘
glTranslatef(-0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
glTranslatef(-0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
glutSolidTeapot(0.3);///柄在畫面中心的茶壺
glPopMatrix();///還原矩陣
glPopMatrix();///還原矩陣
glPushMatrix();///備份矩陣(乾淨的矩陣)
glutSwapBuffers();
}
void motion(int x,int y)
{
angle=x;///較不優的方法
glutPostRedisplay();///請動畫重畫
}
int main(int argc , char**argv) ///進階的main()參數(個數,字串)
{
glutInit(&argc,argv); ///進階參數,初始GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); ///開起2種模式
glutCreateWindow("05160965"); ///盡量不要用中文
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop(); ///主要迴圈
}
沒有留言:
張貼留言