1.模型自轉v.s.公轉
glTranslatef(0.8,0,0);
glRotatef(角度,0,1,0);
///模型在自轉
v.s.
glRotatef(角度,0,1,0);
glTranslatef(0.8,0,0);
///模型繞著中心點轉動
粉色:模型 粉色:模型
橘色:大小 橘色:大小
綠色:被移到某地的 綠色:自己旋轉中的
黃色:整個轉動 黃色:被移到某地的
2.旋轉物件
2-1:茶壺手把在中心
程式碼:
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.4,-0.07,0);///移動
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week12");
glutDisplayFunc(display);
glutMainLoop();
}
2-2:茶壺手把不但在中心,還能旋轉
程式碼:
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,0.1);///旋轉,依後面數值決定如何旋轉
glTranslatef(0.4,-0.07,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
angle+=0.1;///調整速度,數字越大,速度越快
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week12");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
大茶壺不會旋轉的原因:因為沒加上旋轉的程式碼
程式碼:
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);///白色
glutSolidTeapot(0.3);///大茶壺
glPushMatrix();
glTranslatef(0,0,0);///把物件放在某處
glRotatef(angle,0,0,0.1);
glTranslatef(0,0,0);///將把手移到中心
glColor3f(1,0,0);///紅色
glutSolidTeapot(0.2);///小茶壺
glPopMatrix();
glutSwapBuffers();
angle+=0.5;///調整速度
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week12");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}







沒有留言:
張貼留言