1. 程式人生 > >紋理濾波(Texture Filter)

紋理濾波(Texture Filter)

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 }