OpenGL关于纹理映射
有问题的代码如下所示:
Storation[0] = LoadBMP("crate.bmp");
Storation[1] = LoadBMP("woodfloor.bmp");
if(Storation[0] && Storation[1])
Status = true;
glGenTextures(3,&gb_Picture[0]);
glBindTexture(GL_TEXTURE_2D,gb_Picture[0]);
gluBuild2DMipmaps(GL_TEXTURE_2D,3,Storation[0]->sizeX,Storation[0]->sizeY,GL_RGB,GL_UNSIGNED_BYTE,Storation[0]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glBindTexture(GL_TEXTURE_2D,gb_Picture[1]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D,3,Storation[0]->sizeX,Storation[0]->sizeY,GL_RGB,GL_UNSIGNED_BYTE,Storation[0]->data);
glBindTexture(GL_TEXTURE_2D,gb_Picture[2]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D,3,Storation[1]->sizeX,Storation[1]->sizeY,GL_RGB,GL_UNSIGNED_BYTE,Storation[1]->data);
其中LoadBMP是如果文件路径有效,返回一个AUX_RGBImageRec指针,否则返回NULL。首先这里载入的位图大小都不符合2^n规则。在调试状态下,Storation[0]和Storation[1]的值都不为NULL。
问题出在创建第三个纹理的时候,在执行最后一句gluBuild2DMipmaps的时候,弹出错误如下:
opengl.exe 中的 0x77c015ee 处有未经处理的异常: 0xC0000005: 读取位置 0x056b2000 时发生访问冲突
请问这是什么原因?如果是图片大小的问题的话,为什么之前两个纹理能够创建成功呢?
[解决办法]
不建意用 LoadBMP 因它主要用于GDI 的显示用,你可以用LoadImage 它载入的数据可以用于任何设备。
//载入bitmap
HANDLE hImg = LoadImage (NULL,lpszFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);
BOOL success;
BITMAP bitmap;
//得取bimp 数据
success = GetObject(hImg,sizeof(BITMAP),&bitmap);
[解决办法]
1、Status = true; 你虽然得到了这个bool变量,不过没有使用它
2、在绑定gb_Picture[2]纹理的时候,问题出现gluBuild2DMipmaps这,问题有几个可能:
(1)Storation[1]->sizeX或Storation[1]->sizeY或Storation[1]->data获取的数据不对
(2)GL_RGB 加载的位图有alpha通道
OpenGL关于纹理映射解决方法
OpenGL关于纹理映射有问题的代码如下所示:Storation[0] LoadBMP(crate.bmp)Storation[1] LoadBMP(
