以前,我使用教程bmp加载器使用加载器将位图(.bmp)加载到OpenGL纹理中,但我希望能够加载不同的纹理,所以尝试FreeImage。
我正在尝试删除伽玛校正,但使用FreeImage时图像无法正确显示。
以前我用过:
glTexImage2D(GL_TEXTURE_2D,
0,
TextureFormatForBitmapFormat(bmp.PixelFormat(), true),
(GLsizei)bmp.Width(),
(GLsizei)bmp.Height(),
0,
TextureFormatForBitmapFormat(bmp.PixelFormat(), false),
GL_UNSIGNED_BYTE,
bmp.PixelBuffer());
glBindTexture(GL_TEXTURE_2D, 0);
GLenum OpenGLTexture::TextureFormatForBitmapFormat(Bitmap::Format format
, bool srgb)
{
switch (format)
{
case Bitmap::Format_Grayscale: return GL_LUMINANCE;
case Bitmap::Format_GrayscaleAlpha: return GL_LUMINANCE_ALPHA;
case Bitmap::Format_RGB: return (srgb ? GL_SRGB : GL_RGB);
case Bitmap::Format_RGBA: return (srgb ? GL_SRGB_ALPHA : GL_RGBA);
default: throw std::runtime_error("Unrecognised Bitmap::Format");
}
}
使用FreeImage,代码:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, (GLsizei)width,
(GLsizei)height, 0, GL_BGRA,
GL_UNSIGNED_BYTE, (void*)FreeImage_GetBits(img));
问题在于使用FreeImage,我从中得到了一个非常“平淡”的光。有没有办法有效地重现我之前在FreeImage中所做的事情?
提前谢谢你;)