簡介
紋理映射(Texture Mapping)是將紋理空間中的紋理像素映射到螢幕空間中的像素的過程。
在三維圖形中,紋理映射(Texture Mapping)的方法運用得最廣,尤其描述具有真實感的物體。比如繪製一面磚牆,就可以使用一幅具有真實感的圖像或者照片作為紋理貼到一個矩形上,這樣,一面逼真的磚牆就畫好了。如果不用紋理映射的方法,這牆上的每一塊磚都要作為一個獨立的多邊形來繪製。另外,紋理映射能夠保證在變換多邊形時,多邊形上的紋理也會隨之變化。例如,用透視投影模式觀察牆面時,離視點遠的牆壁的磚塊的尺寸就會縮小,而離視點近的就會大些,這些是符合視覺規律的。此外,紋理映射也被用在其他一些領域。如飛行仿真中常把一大片植被的圖像映射到一些大多邊形上用以表示地面,或者用大理石、木材等自然物質的圖像作為紋理映射到多邊形上表示相應的物體。紋理對象通過一個單獨的數字來標識。這允許OpenGL硬體能夠在記憶體中保存多個紋理,而不是每次使用的時候再載入它們,從而減少了運算量,提高了速度。
紋理映射是真實感圖像製作的一個重要部分,運用它可以方便的製作出極具真實感的圖形而不必花過多時間來考慮物體的表面細節。然而紋理載入的過程可能會影響程式運行速度,當紋理圖像非常大時,這種情況尤為明顯。如何妥善的管理紋理,減少不必要的開銷,是系統最佳化時必須考慮的一個問題。還好,OpenGL提供了紋理對象對象管理技術來解決上述問題。與顯示列表一樣,紋理對象通過一個單獨的數字來標識。這允許OpenGL硬體能夠在記憶體中保存多個紋理,而不是每次使用的時候再載入它們,從而減少了運算量,提高了速度。
實現步驟
使用紋理對象的步驟如下:
第一步:定義紋理對象
const int TexNumber4;
GLuint mes_Texture[TexNumber]; //定義紋理對象數組
第二步:生成紋理對象數組
glGenTextures(TexNumber,m_Texture);
第三步:通過使用glBindTexture選擇紋理對象,來完成該紋理對象的定義。
glBindTexture(GL_TEXTURE 2D,m_Texture[0]);
glTexImage2D(GL_TEXTURE_2D,0,3,mes_Texmapl.GetWidthU,mee_Texmapl.GetHeight()
,0,GL_BGR_EXT,GL_UNSIGNED_BYTE,mse_Texmapl.GetDibBitsl'trQ);
第四步:在繪製景物之前通過glBindTexture,為該景物載入相應的紋理。
glBindTexture(GLes_TEXTURE_2D,mse_Texture[0]);
第五步:在程式結束之前調用glDeleteTextures刪除紋理對象。
glDeleteTextures(TexNumber, mee_Texture);
這樣就完成了全部紋理對象的管理和使用。