電腦圖學 Week04 2021-03-17
1. 主題: mouse motion函式
(1)先使用前幾節(week01)所學開啟一個GLUT專案
#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();
--------------------------------------------------------------------------------------------------------











沒有留言:
張貼留言