歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

使用OpenGL的glBindTexture()函數需要注意

由於不了解OpenGL中的glBindTexture()函數的用法,多耽誤了我幾個小時的寶貴時間!

glBindTexture()函數在渲染的時候調用,需要注意,一定不能放在glBegin()和glEnd()函數對中,否則函數的調用無效。下面就總結一下怎樣在OpenGL中載入和顯示紋理。

1、在初始化階段,調用glGenTextures()函數產生紋理名(紋理索引),使用glBindTexture()函數綁定紋理,再用熟悉的圖形加載庫函數加載一個紋理,使用glTexImage2D()將數據載入至顯存中;

2、在顯示階段,調用glBindTexture()函數將紋理綁定至顯示上下文中,與頂點一起進入紋理貼圖階段。

下面是一段演示代碼說明了怎樣載入和顯示紋理:

void InitGL( void )
{
 glEnable( GL_TEXTURE_2D );// 啟用2D紋理
 glGenTextures( size, (GLuint*)&pTexture[0] );// size是大小,pTexture是紋理名指針


 ……
 glBindTexture( GL_TEXTURE_2D, pTexture[0] );
 pData = LoadImage( fileName );// 載入文件,保存至pData指針中
 glTexImage2D( GL_TEXTURE_2D,// 目標
                          0,// 級別
                          internalFormat,// 紋理內部格式
                          width,// 紋理的寬(最好2的次方)
                          height,// 紋理的高(最好2的次方)
                          0,// 紋理的深度(最好2的次方)
                          0x80E1,// 紋理單元格式(GL_BGRA=0x80E1)
                          textureType,// 像素的數據類型
                          pData );// 數據指針
 ……
}


void RenderGL( void )
{
 glBindTexture( GL_TEXTURE_2D, pTexture[0] );
 glBegin( primitive );
 glTexCoord( u, v );
 glVertex3f( x, y, z );
 ……
 glEnd( );
}

Copyright © Linux教程網 All Rights Reserved