《OpenGL編程基礎》第三章筆記1

個人認爲,第三章分兩個部分,第一部分介紹了一些glut工具。第二部分介紹了OpenGL的工作方式。

首先,glut的工具:

1 重繪回調函數

void glutReshapeFunc(void (*newShape)(int width, int height))

當窗口的尺寸改變事,會執行方法newShape。newShape的參數分別是窗口的寬度和高度。newShape可以由程序員自定義實現、替換。

在main函數中通過 glutReshapeFunc(newShape);語句來註冊newShape函數,這樣,在改變窗口尺寸後,newShape將被執行。

打個比方,我們申明瞭一個函數叫 plant_a_Watermelon_as_window(int width, int height) { /*種個跟窗口一樣大個瓜 :D */ }

然後在main函數中用glutReshapeFunc註冊:glutReshapeFunc(plant_a_Watermelon_as_window).

這樣,當改變窗口大小時,窗口的地裏總是有個跟窗口一樣大的瓜。大笑


2 Idel回調函數

void glutIdleFunc(void (*myIdle(void))

當事件隊列爲空時。函數muIdle將被執行。簡單的理解,當窗口就那麼擺到屏幕上,不去理他,不按鍵盤也不動鼠標,就看着它。那麼這個myIdle將被執行。

在main函數中通過 glutIdleFunc(myIdle);語句來註冊myIdle函數,這樣,在恰當時間,myIdle將被執行。


3 鍵盤,鼠標,

void glutKeyboardFunc(void (*f)(unsigned char key, int x, int y))

當按下按鍵時,執行f函數。x,y是按下按鍵時鼠標的座標


void glutSpecialFunc(void (*f)(int key, int x, int y))

當按下特殊按鍵時,執行f函數,特殊按鍵包括F1,方向鍵等等,key即按下的按鍵值(例如GLUT_KEY_F1, GLUT_KEY_UP等等)。x,y是按下按鍵時鼠標的座標

int glutGetModifiers()

判斷按鍵組合試試用:例如Ctrl+c這麼表示:

if(glutGetModifiers()==GLUT_ACTIVE_CTRL && key =='c'){ /* copy*/ }


void glutMouseFunc(void (*f)(int button, int state, int x, int y))

當鼠標被按鍵被點擊時,執行f函數。botton取值GLUT_RIGHT_BUTTON等,state取值GLUT_DOWN、GLUT_UP。


void glutMotionFunc(void (*f)(int x, int y))

當鼠標按鍵被按下並且移動時,執行f函數

void glutPassiveMotionFunc(void (*f)(int x, inty))

當鼠標按鍵沒有按下僅僅移動時,執行f函數


void glutEntryFunc(void (*f)(int state))

當鼠標進入或者離開窗口時,執行f函數。state的值可能是GLUT_ENTERED或者GLUT_LEFT

如果我需要,那麼你進入我的田地,或者離開我的田地,都要跟我打報告大笑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章