1. glTranslated(移動x座標多少距離、移動y座標多少距離、移動z座標多少距離) : 可以改變位
置(會影響之後的程式碼)
2. glRotated(度數、旋轉軸) : 一直旋轉,ex: glRotated(60,1,0,0) => 對x軸旋轉60度(右手座標系
統)(座標軸的座標會自動正規劃)
二 、 程式碼
控制滑鼠事件 :
float dx,dy,dz; /// 我要畫的3D位置
int oldx,oldy,oldz; /// 舊的x,y,z位置
void motion(int x,int y){ /// 用來拖著移動時
dx+=(x-oldx)/150.0;
dy+= -1*(y-oldy)/150.0;
oldx=x;
oldy=y;
glutPostRedisplay(); /// 貼便利貼 請電腦重畫
}
void mouse(int button,int state,int x,int y){
if(state==GLUT_DOWN){
oldx=x,oldy=y; /// 紀錄點擊時的座標
}
int main(){
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
display函式裡 :
glPushMatrix(); /// 備份矩陣
glTranslated(-2.4,1.2,-6); /// 移動
glRotated(60,1,0,0); /// 轉一次
glRotated(a,0,0,1); /// 隨時間一直轉
glScalef(1.5,1.5,1.5); /// 改變大小
glColor3d(0,1,0);
glutSolidTeapot(1);
glColor3d(1,0,0);
glPopMatrix(); /// 還原矩陣
三 、 課堂練習
1. 修改glut專案範例程式碼,在display函式中,glPushMatrix()跟glPopMatrix()中間加入
glutSolidTeapot(1)並註解glutSolidSphere,使程式執行時,畫出會旋轉的茶壺。

2. 把所有glRotated先註解掉,留下控制左上角的glRotated,執行後可以發現只有左上角的圖案
在旋轉。
3. 修改glut專案範例程式碼,在display函式中,第一個glPushMatrix()跟glPopMatrix()中間加入
glScalef(1.5,1.5,1.5),執行後會發現左上角的圖案放大1.5倍。

4. 運用上方滑鼠事件的程式碼,讓圖案可以隨著滑鼠點擊移動。
沒有留言:
張貼留言