OpenGL(13)GLU庫API
阿新 • • 發佈:2019-01-24
/************************http://blog.csdn.net/sunboyiris*************************************/ //根據OpenGL或GLU錯誤程式碼產生錯誤字串 const GLubyte* APIENTRY gluErrorString ( GLenum errCode); const wchar_t* APIENTRY gluErrorUnicodeStringEXT ( GLenum errCode); //得到一個描述GLU版本號或支援GLU擴充套件呼叫的字串 const GLubyte* APIENTRY gluGetString ( GLenum name); /* near和far預設為-1和1,此函式決定一個平行六面體 */ void APIENTRY gluOrtho2D ( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); /* gluPerspective這個函式指定了觀察的視景體(frustum為錐臺的意思,通常譯為視景體)在世界座標系中的具體大小 */ void APIENTRY gluPerspective ( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); /*將裁剪區域變成一個單位立方體. 它是用來根據當前滑鼠選擇區域生成一個相應的投影矩陣的。這裡面頭兩個引數不是這個選擇區域的左上角位置,而是整個區域的中心位置。如果錯把它當成左上角,選擇的區域就會斜向上有個偏移。 */ void APIENTRY gluPickMatrix ( GLdouble x, GLdouble y, GLdouble width, GLdouble height, GLint viewport[4]); /* 該函式定義一個檢視矩陣,並與當前矩陣相乘。 第一組eyex, eyey,eyez 相機在世界座標的位置 第二組centerx,centery,centerz 相機鏡頭對準的物體在世界座標的位置 第三組upx,upy,upz 相機向上的方向在世界座標中的方向 你把相機想象成為你自己的腦袋: 第一組資料就是腦袋的位置 第二組資料就是眼睛看的物體的位置 第三組就是頭頂朝向的方向(因為你可以歪著頭看同一個物體) */ void APIENTRY gluLookAt ( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); /* 用於返回變換後的視窗座標 基本思路 1、將輸入的頂點,通過模型檢視矩陣,變換到模型檢視矩陣的座標系中; 2、將模型檢視矩陣中的頂點,再變換到投影矩陣中; 3、將頂點縮放到[0, 1]的對映區間中; 4、通過視口的位置和大小,計算出當前3D頂點中的螢幕座標(2D座標) */ int APIENTRY gluProject ( GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *winx, GLdouble *winy, GLdouble *winz); /* gluPorject反過來的過程 思路: 1、首先,需要將輸入的頂點,通過視口變換到[0, 1]之間; 2、然後將頂點縮放到[-1, 1]之間,就是上面程式碼中的scaleMat矩陣的逆矩陣 3、然後乘上投影矩陣的逆矩陣; 4、最後就是乘上模型檢視矩陣的逆矩陣; */ int APIENTRY gluUnProject ( GLdouble winx, GLdouble winy, GLdouble winz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *objx, GLdouble *objy, GLdouble *objz); //gluScaleImage這個函式用適當的畫素儲存模式改變一個畫素影象的大小來讀取源影象的畫素資料然後把畫素寫入新的目標影象 int APIENTRY gluScaleImage ( GLenum format, GLint widthin, GLint heightin, GLenum typein, const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *dataout); /* 如果已經建立0級(解析度最高的)mipmap, 可以使用函式gluBuild1DMipmaps(), gluBuild2DMipmaps() 和 gluBuild3DMipmaps()來定義和建立mipmap金字塔. 塔頂為1X1(對於一維紋理為1; 三維紋理為1X1X1)的mipmap. 如初始影象的大小不是2的冪, 可以使用函式gluBuild*DMipmaps()將影象大小縮放到最接近2的冪, 如紋理太大, 可以使用函式gluBuild*DMipmaps()將影象縮小到足夠的資源來儲存它(使用GL_PROXY_TEXTURE機制確定). */ int APIENTRY gluBuild1DMipmaps ( GLenum target, GLint components, GLint width, GLenum format, GLenum type, const void *data); int APIENTRY gluBuild2DMipmaps ( GLenum target, GLint components, GLint width, GLint height, GLenum format, GLenum type, const void *data);