1.顯示3D模型
(會顯示出這樣的一個視窗&&有很多模型可以選擇&&老師有教用右手定則來判斷旋轉方向&&老師有親身演示很有趣)
(如圖所示老師有解釋三個單字什麼意思)
(右手定則:其餘四個手指為旋轉方向)
2.修改程式碼
(改了六行程式碼)
PS修改的程式碼:
glutMotionFunc(motion);///TODO:加了mouse motion的函式,可捉mouse的動態
void motion(int x,int y)///TODO:mouse motion現在動到哪裡了
{
myAngle=x;///TODO:我的角度,就是x的值
}
const double a = myAngle;///TODO:把角度塞進去
float myAngle=0;///TODO:我們的變數的宣告
(會根據滑鼠的方向旋轉)
3.有變化的茶壺(3-1)
(茶壺會根據滑鼠的方向旋轉,是不是很像在倒茶)
PS程式碼:
#include <GL/glut.h>
float myAngle=0;///TODO:宣告我的角度的變數
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();
glRotatef(myAngle, 0,0,1);///TODO:對z軸,做旋轉
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x, int y)
{
myAngle = x;///TODO:我的角度,等下要拿來用
display();///TODO:每次做動作,就重畫畫面
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week 04 rotate");
glutMotionFunc(motion);///加motion函式
glutDisplayFunc(display);
glutMainLoop();
}
**一定要寫清畫面的程式碼 不然會有很多個茶壺重影**
4.有變化的茶壺(3-2)
(茶壺會根據滑鼠的方向旋轉,而且能夠停住在原來的位置繼續旋轉)
PS程式碼:
#include <GL/glut.h>
float myAngle=0;///TODO:宣告我的角度的變數
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();
glRotatef(myAngle, 0,0,1);///TODO:對z軸,做旋轉
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int oldX=0;///宣告變數
void mouse(int button, int state ,int x, int y)
{
if(state==GLUT_DOWN) oldX = x;///按下去時記得你在哪裡
}
void motion(int x, int y)
{
myAngle += (x-oldX);///TODO:我的角度,等下要拿來用
oldX = x;
display();///TODO:每次做動作,就重畫畫面
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week 04 rotate");
glutMotionFunc(motion);///加motion函式
glutMouseFunc(mouse);
glutDisplayFunc(display);
glutMainLoop();
}
**老師為了讓我們理解還講了大象的笑話**
(茶壺旋轉示意圖)









沒有留言:
張貼留言