2017年10月5日 星期四

LBH的計圖學習筆記_week 04

一 、 函式

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. 運用上方滑鼠事件的程式碼,讓圖案可以隨著滑鼠點擊移動。

沒有留言:

張貼留言