我试图在我的程序中显示一些纹理,我有这个用于将位图加载到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位颜色。
如果您需要任何其他代码,请告知我们。
编辑 - 如果有人知道任何可以满足我要求的图书馆,请告诉我
答案 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的循环内。