【发布时间】:2020-06-05 19:16:38
【问题描述】:
我已使用此类代码将 .bmp 文件加载为纹理,我想填充一个矩形(例如右墙上的矩形)
GLuint LoadBMP(const char *fileName)
{
FILE *file;
unsigned char header[54];
unsigned int dataPos;
unsigned int size;
unsigned int width, height;
unsigned char *data;
file = fopen(fileName, "rb");
if (file == NULL)
{
//MessageBox(NULL, L"Error: Invaild file path!", L"Error", MB_OK);
return false;
}
if (fread(header, 1, 54, file) != 54)
{
//MessageBox(NULL, L"Error: Invaild file!", L"Error", MB_OK);
return false;
}
if (header[0] != 'B' || header[1] != 'M')
{
//MessageBox(NULL, L"Error: Invaild file!", L"Error", MB_OK);
return false;
}
dataPos = *(int*)&(header[0x0A]);
size = *(int*)&(header[0x22]);
width = *(int*)&(header[0x12]);
height = *(int*)&(header[0x16]);
if (size == NULL)
size = width * height * 3;
if (dataPos == NULL)
dataPos = 54;
data = new unsigned char[size];
fread(data, 1, size, file);
fclose(file);
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
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, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
return texture;
}
并像这样使用它:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(0.0, 0.0, 0.0);
GLuint texture = LoadBMP("mina.bmp");
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_REPLACE);
glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
glTexCoord2i(0, 0); glVertex2i(0, 0);
glTexCoord2i(0, 1); glVertex2i(0, 5);
glTexCoord2i(1, 1); glVertex2i(5, 5);
glTexCoord2i(1, 0); glVertex2i(5, 0);
glEnd();
glDisable(GL_TEXTURE_2D);
但是当我运行它时,它什么也不做,当我注释掉这两行时:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
输出是黑色矩形而不是带纹理的矩形。
我不知道怎么了!
是关于我使用的 .bmp 文件吗?
我将带有 microsoft paint 的 jpeg 格式更改为 .bmp 文件。我什至尝试使用由 Visual Studio 创建的 .bmp 文件。
这是我说的第二个输出:
【问题讨论】:
-
也许更简单的方法是使用一些库来加载图像。我建议将 lodepng 用于 png 图像。
-
可以试试这个:pastebin.com/sNXF1QXx 它应该可以工作..
-
哈,我知道我没有解决您的问题的方法,但是您加载位图的代码帮助我了解了如何加载纹理。 (对我来说很好)。谢谢
-
也感谢 BMP 加载功能。
标签: c++ opengl texture-mapping