叶莉是真心喜欢姚明吗:为什么执行了glGenTextures(1, &texture);函数后texture的值没有变?

来源:百度文库 编辑:高考问答 时间:2024/05/11 05:17:35
下面是我的代码,请帮帮我!
LoadT8("data/images/sand4.bmp", g_cactus[0]);//地面帖图
//这是我调用该函数的
下面是函数体,文件能够打开,pImage的值也对,可是执行了
glGenTextures(1, &texture);后texture的直应该变为2,可是为什么它的值没变呢?是一个超大的数3452816845,这是为什么?
bool baiscobj::LoadT8(char *filename, GLuint &texture)//调8位贴图
{ AUX_RGBImageRec *pImage = NULL;
pImage = auxDIBImageLoad(filename); // 装入位图
if(pImage == NULL) return false; // 位图没装入返回错误
glGenTextures(1, &texture); // 生成贴图(纹理)
glBindTexture (GL_TEXTURE_2D,texture);// 捆绑贴图(纹理)
gluBuild2DMipmaps(GL_TEXTURE_2D,4, //
pImage->sizeX, // 图形宽
pImage->sizeY, // 图形高
GL_RGB, GL_UNSIGNED_BYTE,
pImage->data // 图形数据
);
free(pImage->data); // 释放位图数据占据的内存资源
free(pImage);
return true; // 返回成功
}

textures
A pointer to the first element of an array in which the generated texture names are stored.
(textures是一个指针,指向纹理数组的第一个单元)

textures并不是纹理内容,而是纹理单元,纹理内容是用glTexImage*D来设置的,几维的纹理就是几D,目前有glTexImage1D,glTexImage2D,glTexImage3D

使用纹理的步骤:
glEnable(GL_TEXTURE_3D);
glGenTextures(1,&this->m_idTex3d);
glBindTexture(GL_TEXTURE_3D,this->m_idTex3d);

设置纹理参数,比如:
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameterf(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameterf(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP);
glTexParameterf(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

load纹理数据,比如: glTexImage3D(GL_TEXTURE_3D,0,GL_RGBA,width,height,depth,0,GL_RGBA,GL_UNSIGNED_BYTE,data);