纹理加载不正确?

时间:2012-01-09 14:10:35

标签: c++ opengl textures

我试图在我的程序中显示一些纹理,我有这个用于将位图加载到openGL纹理中的代码:

void LoadGLTextures()
{
  // Bitmap handle and structure
  HBITMAP hBMP;
  BITMAP  BMP;

  // Generate list of textures from resources
  byte Texture[] = {IDB_FONT, IDB_SKIN, IDB_PIANO};
  glGenTextures(sizeof(Texture), &texture[0]);

   // Iterate through texture list and load bitmaps
  for (int loop=0; loop<sizeof(Texture); loop++)
  {
    hBMP = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(Texture[loop]),
                          IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
    if (hBMP)
    {
     GetObject(hBMP,sizeof(BMP), &BMP);
     glPixelStorei(GL_UNPACK_ALIGNMENT,4);
     glBindTexture(GL_TEXTURE_2D, texture[loop]);
     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);

  // Generate Mipmapped Texture (3 Bytes, Width, Height And Data From The BMP)
     gluBuild2DMipmaps(GL_TEXTURE_2D, 3, BMP.bmWidth, BMP.bmHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);
     DeleteObject(hBMP);
    }
  }

当我的背景皮肤加载并正确绘制时,其他(钢琴)纹理不会被绘制。我确定绘图代码是正确的,因为当我交换使用哪个纹理(从钢琴到背景纹理,在这种情况下),其他纹理被绘制。所以我认为位图没有正确加载。但我不确定为什么?我忽略了一些明显的东西吗?

位图为128 * 256和24位颜色。

如果您需要任何其他代码,请告知我们。

编辑 - 如果有人知道任何可以满足我要求的图书馆,请告诉我

1 个答案:

答案 0 :(得分:0)

它可能无法正常工作,因为它已被弃用。

来自http://www.opengl.org/wiki/Common_Mistakes

gluBuild2DMipmaps - 永远不要使用它。使用GL_GENERATE_MIPMAP(需要GL 1.4)或glGenerateMipmap函数(需要GL 3.0)。

编辑:此外,您可能需要为每个纹理单元调用glEnable(GL_TEXTURE_2D),即在您调用glBindTexture的循环内。