主题:用OpenGL如何调用位图文件
斜阳飘雨
[专家分:0] 发布于 2006-07-23 18:25:00
我在vc++平台上,用opengl调用位图文件,请哪位大侠帮忙,告知详细代码,谢谢了!
回复列表 (共2个回复)
沙发
yzf1974 [专家分:20] 发布于 2006-10-15 11:41:00
static GLubyte Mask[128];
FILE *fp;
fp = fopen("mask.bmp", "rb");
if( !fp )
exit(0);
// 移动文件指针到这个位置,使得再读sizeof(Mask)个字节就会遇到文件结束
// 注意-(int)sizeof(Mask)虽然不是什么好的写法,但这里它确实是正确有效的
// 如果直接写-sizeof(Mask)的话,因为sizeof取得的是一个无符号数,取负号会有问题
if( fseek(fp, -(int)sizeof(Mask), SEEK_END) )
exit(0);
// 读取sizeof(Mask)个字节到Mask
if( !fread(Mask, sizeof(Mask), 1, fp) )
exit(0);
fclose(fp);
板凳
lusuo [专家分:10100] 发布于 2006-12-05 09:23:00
楼上得你在干吗呢~~不会就不会别乱说啊
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL; //文件句柄
if (!Filename)
{
return NULL;
}
File = fopen(Filename,"r");
if (File) // Does The File Exist?
{
fclose(File); // Close The Handle
}
return auxDIBImageLoad(Filename);
}
int LoadGLTextures()
{
int Status = false;
//记录下位图信息
AUX_RGBImageRec *TextureImage[1];
//初始化!
memset(TextureImage,0,sizeof(void *)*1);
TextureImage[0] = LoadBMP(_T("cloud.bmp"));
if(NULL != TextureImage[0])
{
Status = true;
//创建3个纹理
glGenTextures(3, &texture[0]);
//使用这个纹理
glBindTexture(GL_TEXTURE_2D, texture[0]);
//设置纹理过滤连
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST );// Linear Filtering
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_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);
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); // NEW
}
if (TextureImage[0]) // If Texture Exists
{
if (TextureImage[0]->data) // If Texture Image Exists
{
free(TextureImage[0]->data); // Free The Texture Image Memory
}
free(TextureImage[0]); // Free The Image Structure
}
return Status;
}
最一般得加载方法没用aux库
我来回复