2012-12-26 26 views
0

所以我有点做了一个小的bmp进口商为了能够在opengl中使用纹理,但在我加载图片和东西,而不是纹理后,它只是把颜色棕色的... sqare 我也尝试过超过1个纹理,我得到了相同的保护。 下面是一些代码:我的bmp不耐烦怎么回事?

int LoadBitmap (char *filename) { 
    BITMAPFILEHEADER fileheader; 
    BITMAPINFOHEADER fileinfo; 
    RGBTRIPLE rgb; 
    unsigned char *texture; 
    FILE *f=fopen(filename,"r"); 
    num_texture++; 
    fread(&fileheader,sizeof(fileheader),1,f); 
    fread(&fileinfo,sizeof(fileinfo),1,f); 
    cout<<fileinfo.biWidth<<" "<<fileinfo.biHeight<<endl; 

    texture=new unsigned char[fileinfo.biWidth*fileinfo.biHeight*4]; 
    int j=0; 
    for(int i=0;i<fileinfo.biWidth*fileinfo.biHeight;i++) 
    { 
    fread(&rgb,sizeof(rgb),1,f); 

    texture[j]=rgb.rgbtRed; 
    texture[j+1]=rgb.rgbtGreen; 
    texture[j+2]=rgb.rgbtBlue; 
    texture[j+3]=255; 
    j+=4; 
    } 
    fclose(f); 

    glBindTexture(GL_TEXTURE_2D,num_texture); 

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 


    glTexImage2D(GL_TEXTURE_2D,0,4,fileinfo.biWidth,fileinfo.biHeight,0,GL_RGBA,GL_UNSIGNED_BYTE,texture); 
    gluBuild2DMipmaps(GL_TEXTURE_2D,4,fileinfo.biWidth,fileinfo.biHeight,GL_RGBA,GL_UNSIGNED_BYTE,texture); 

    delete[] texture; 
    return num_texture; 
    return 0; 
} 

,这里是绘图部分:

glEnable(GL_TEXTURE_2D); 
int a=LoadBitmap("texture1.bmp"); 
glBindTexture(GL_TEXTURE_2D,a); 
glBegin(GL_QUADS); 
    glTexCoord2f(0,0); 
    glVertex3f(-10,-10,0); 
    glTexCoord2f(0,1); 
    glVertex3f(-10,10,0); 
    glTexCoord2f(1,1); 
    glVertex3f(10,10,0); 
    glTexCoord2f(1,0); 
    glVertex3f(10,-10,0); 
glEnd(); 

回答

2
FILE *f=fopen(filename,"r"); 

你可能要尝试打开该文件在二进制模式下,它可以简单地检测文件的结束或以其他方式改变输入。

FILE *f=fopen(filename,"rb"); 

也使有关文件的实际格式的一些假设,但假设你生成的BMP自己,我想这可能是好的。

+0

在查询之前,我查了一下bmp格式:http://en.wikipedia.org/wiki/BMP_file_format但遗憾的是我不知道如何实现那些最优化的东西(我的意思是我真的不知道如何如果他们不在那里,我们可以通过他们)我想能够导入任何bmp,但我不知道如果没有结构名称在乞讨中有某种标题或idk,因为它们具有可变大小 – user1640736