读书人

openGL加载显示TGA图片有关问题

发布时间: 2012-05-28 17:59:33 作者: rapoo

openGL加载显示TGA图片问题
大家好,最近加载TGA图片,总是不能显示。看其他人写的都是把图片当做纹理来显示。但自己做的显示BMP图片,不做为纹理加载也能显示。我想问问TGA图片,能不能不做纹理加载,只是显示。

[解决办法]
不是纹理那怎么显示?和图片格式完全没关系的
[解决办法]
glDrawPixels
[解决办法]
tga可以的。网上找找例子程序。
[解决办法]

BOOL LoadTGA(char *filename)
{
if (filename==NULL)
{
return FALSE;
}
FILE *fp=fopen(filename,"rb");
if (fp==NULL)
{
return FALSE;
}

unsigned char hdrinfo[18];
if (fread(hdrinfo,1,18,fp)!=18)
{
fclose(fp);
return FALSE;
}
if(hdrinfo[0]!='\0'||hdrinfo[1]!='\0'||hdrinfo[2]!=2)
{
fclose(fp);
return FALSE;
}
width=hdrinfo[12]+hdrinfo[13]*256;
height=hdrinfo[14]+hdrinfo[15]*256;

if (hdrinfo[16]!=0x18&&hdrinfo[16]!=0x20)
{
fclose(fp);
return FALSE;
}
depth=hdrinfo[16];
//这个地方读取数据时应注意对齐,TGA文件原始数据没有对齐,所以在这里要自己调整下
UINT Scanline,DataLine,offset;
UINT AllocSize;
PBYTE pOffset;
DataLine=width*(depth>>3);
if (DataLine%4==0)
{
offset=0;
}
else
{
offset=4-DataLine%4;
}
Scanline=DataLine+offset;
AllocSize=Scanline*height;
pbmpData=new BYTE[AllocSize];
ZeroMemory(pbmpData,AllocSize);
if (pbmpData==NULL)
{
fclose(fp);
return FALSE;
}
pOffset=pbmpData;
for (UINT i=0;i<height;i++)
{
if(fread(pOffset,1,DataLine,fp)!=DataLine)
{
fclose(fp);
return FALSE;
}
pOffset+=Scanline;
}
fclose(fp);
SetWindowText(hWnd,filename);
return TRUE;
}

//自己看看吧。。。

读书人网 >网络游戏

热点推荐