|
|

楼主 |
发表于 2006-2-9 20:16:00
|
显示全部楼层
Re:请教:为何纹理在某些机器上显示不出来,640*480小纹理
这个抱歉忘了说,原始图像640*480,后面是处理过的,扩展成2^m,2^n;还有bmp是24位的:
void COpenGLView: oadTexture(CString FilePath)
{
wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC);
glEnable(GL_TEXTURE_2D);
TextureImage = auxDIBImageLoad(FilePath);
int X1=TextureImage->sizeX;
int Y1=TextureImage->sizeY;
//对打开图象的长宽做处理,构造一个比原图象大的数组
int X2=pow(2,(int)ceil(log(X1)/log(2)));
int Y2=pow(2,(int)ceil(log(Y1)/log(2)));
//拷贝数据
data=new unsigned char[X2*Y2*3];
int ucs=sizeof(unsigned char);
for (int i=0;i<Y1;i++)
{
memset(data+ucs*X2*i*3,0,ucs*X2*3);
memcpy(data+ucs*X2*i*3,TextureImage->data+ucs*X1*i*3,ucs*X1*3);
}
//计算长宽缩放比例
XScale=X1*1.0f/X2;
YScale=Y1*1.0f/Y2;
glTexImage2D(GL_TEXTURE_2D, 0, 3,X2, Y2,0, GL_RGB, GL_UNSIGNED_BYTE, data);
//定义贴图
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
glTexImage2D(GL_TEXTURE_2D, 0, 3,X2, Y2,0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);
}
如上,在我自己的机器上是显示正确,但是有些机器上不对,不好意思漏说了这个。。。 |
|