紋理濾波(Texture Filter)
阿新 • • 發佈:2019-02-01
0 原始貼圖
1 Nearest濾波紋理
2 線性濾波紋理
3 MipMapped紋理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
int LoadGLTextures() //
載入點陣圖(呼叫上面的程式碼)並轉換成紋理
{
int Status=FALSE; //
狀態指示器
AUX_RGBImageRec
*TextureImage[1]; //
建立紋理的儲存空間
memset (TextureImage,0, sizeof ( void *)*1); //
將指標設為 NULL
//
載入點陣圖,檢查有錯,或點陣圖不存在的話退出
if (TextureImage[0]=LoadBMP( "E:/OpenSource/Nehe/code/07_FilterAndLight/Debug/Data/Crate.bmp" ))
{
Status=TRUE; //
狀態設為 TRUE
glGenTextures(3,
&texture[0]); //
建立紋理
//
建立 Nearest 濾波貼圖
glBindTexture(GL_TEXTURE_2D,
texture[0]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D,
0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
//
建立線性濾波紋理
glBindTexture(GL_TEXTURE_2D,
texture[1]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,
0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
//
建立 MipMapped 紋理
glBindTexture(GL_TEXTURE_2D,
texture[2]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D,
3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
}
if (TextureImage[0]) //
紋理是否存在
{
if (TextureImage[0]->data) //
紋理影象是否存在
{
free (TextureImage[0]->data); //
釋放紋理影象佔用的記憶體
}
free (TextureImage[0]); //
釋放影象結構
}
return Status; //
返回 Status
}
|