回 帖 发 新 帖 刷新版面

主题:用OpenGL如何调用位图文件

我在vc++平台上,用opengl调用位图文件,请哪位大侠帮忙,告知详细代码,谢谢了!

回复列表 (共2个回复)

沙发

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);

板凳

楼上得你在干吗呢~~不会就不会别乱说啊
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库

我来回复

您尚未登录,请登录后再回复。点此登录或注册