2021年3月17日 星期三

Xian筆記-Week04

電腦圖學 Week04 2021-03-17

1. 主題: mouse motion函式

(1)先使用前幾節(week01)所學開啟一個GLUT專案


(2)依序寫出程式碼~


#include <GL/glut.h> ///使用GLUT外掛 #include <math.h> ///使用數學外掛 cos() sin() #include <stdio.h> ///TODO: 因為要 printf() void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidTeapot(0.3); glutSwapBuffers(); } void mouse(int button ,int state , int x , int y) { ///TODO: 左、中、右鍵 按下、上 x座標 y座標 printf("button:%d state:%d x:%d y:%d\n", button, state, x, y); } ///TODO: 印出這些值,觀察一下 int main(int argc, char*argv[]) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); ///少寫一個,因為預設就是RGB glutCreateWindow("07361092 work02!!!"); glutDisplayFunc(display); glutMouseFunc(mouse);///TODO: 我們註冊的 mousec函式 glutMainLoop(); }


























--------------------------------------------------------------------------------------------------------

補充一下 ! ! !

如圖所示:
  圖(1):當你有多個專案的時候,bulid & run 會去找灰底深字的那個專案 ! ! !
  圖(2):想改變專案時,就對想改變的專案按右鍵>Activate project , 成功 ! ! !




--------------------------------------------------------------------------------------------------------

電腦圖學 Week04 2021-03-17
1. 主題: mouse motion函式




#include <GL/glut.h> ///使用GLUT外掛 int N=0,vx[3000], vy[3000]; ///x,y座標各給它們3000個點空間 void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_LINE_LOOP); for(int i=0; i<N; i++){ glVertex2f( (vx[i]-150)/150.0, -(vy[i]-150)/150.0 ); } /// 減一半,再除一半 減一半,再除一半,加負號 /// 對照著視窗的座標 glEnd(); glutSwapBuffers(); }
void motion( int x , int y) { ///TODO2: mouse motion 在拖動它 vx[N]=x; vy[N]=y; ///把x,y的值存起來 N++; display();///邊動mouse motion, 邊畫display() } int main(int argc, char*argv[]) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); ///少寫一個,因為預設就是RGB glutCreateWindow("07361092 work02!!!"); glutDisplayFunc(display); glutMotionFunc(motion);///TODO2: mouse motion 在動哦!!!! glutMainLoop(); }



































補充說明 ! ! !
    在上述的程式中,motion啟動後,x,y的座標存起來,N++一次表做了一個點
馬上呼叫display()去畫畫,display去找你剛剛存起來的座標,畫出來
    同時做出這些事情,所以結果就是~~~
邊動滑鼠,圖形也跟著畫出來!

--------------------------------------------------------------------------------------------------------

2. 主題: 移動、旋轉、放大縮小

老師有丟給我們一個檔案,裡面是一個範例讓我們去了解這個主題!



2.1. glTranslatef(x, y, z);

移動車子的位置!!!

2.2. glRotatef( angle, x, y, z);

選擇軸心後,旋轉車子角度!

Ex:
    以y軸為中心,旋轉車子41度!!!
    如何辨識理解???????
    右手安培定律:
        大拇指為軸心,其他四指為旋轉方向!

補充一下:
    如果軸心為負號的話,轉動相反喔~(不管怎樣就是右手定律就對了!)





2.3. glScalef(x, y, z);

改變車子的體型!!!



--------------------------------------------------------------------------------------------------------

最後發現
原來第一週的旋轉三角形
就是對著Z軸旋轉的!!!

glPushMatrix(); glRotatef(theta, 0.0f, 0.0f, 1.0f);///跟2.2長的一模一樣啊! glPopMatrix();





--------------------------------------------------------------------------------------------------------




沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...