先去下載data和win32資料夾打開裡面的transform.exe
這次我們上課要教的是這裡面的Rotate旋轉
如果我們調整的是X軸
圖中模型就會往前後轉動
Y軸則是往左右轉動 但是會面向左右邊轉動
而Z軸則是一樣往左右 但人物是會保持正向並往左右邊倒
而如果我們一次調整XYZ三個軸 人物就會往斜向轉動
加上glRotatef()看看旋轉的效果
#include <GL/glut.h>///使用GLUT外掛簡化程式
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///畫圖前先清畫面
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);///實心的茶壺
glPopMatrix();
glutSwapBuffers();///畫好後交換出來
}
void motion(int x,int y)
{
angle=x;
display();
}
int main(int argc,char** argv)///main()主函式 進階版
{
glutInit(&argc,argv);///把參數送給glutInit初始化
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);///雙緩衝區+3D深度功能
glutCreateWindow("week02_1");///開GLUT視窗
glutDisplayFunc(display);///用來顯示的函式
glutMotionFunc(motion);
glutMainLoop();///主要的程式迴圈
}
#include <GL/glut.h>///使用GLUT外掛簡化程式
float angle=0,oldX=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///畫圖前先清畫面
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);///實心的茶壺
glPopMatrix();
glutSwapBuffers();///畫好後交換出來
}
void motion(int x,int y)
{
angle+=(x-oldX);
oldX=x;
display();
}
void mouse(int button,int state,int x,int y)
{
oldX=x;///定錨
}
int main(int argc,char** argv)///main()主函式 進階版
{
glutInit(&argc,argv);///把參數送給glutInit初始化
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);///雙緩衝區+3D深度功能
glutCreateWindow("week02_1");///開GLUT視窗
glutDisplayFunc(display);///用來顯示的函式
glutMotionFunc(motion);///mouse motion動
glutMouseFunc(mouse);///上周教:mouse按下去、放開來
glutMainLoop();///主要的程式迴圈
}
沒有留言:
張貼留言