|
|
//从文件创建纹理
bool Frame::CreateTexture(char *filename,GLuint texture)
{
AUX_RGBImageRec *pImage = NULL;
pImage = auxDIBImageLoad(filename);
if(pImage == NULL) return false;
glGenTextures(1,&texture);//创建一个纹理
glBindTexture(GL_TEXTURE_2D,texture);//分配空间
glTexImage2D(GL_TEXTURE_2D,0,3,pImage[0].sizeX,pImage[0].sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,pImage[0].data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
free(pImage->data);
free(pImage);
return true;
}
这是加载本地图片并创建纹理的代码,然后在初始化窗口时进行实际的加载并绑定
//初始化窗口
void Frame::InitWindow(int Width,int Height)
{
this->CreateTexture("c:\\kkun.BMP",oTexture[0]); //256*256
this->CreateTexture("c:\\1.bmp",oTexture[1]); //256*256
在渲染窗口时的代码
//渲染窗口
void Frame::RenderWindow()
{
glClearColor(0.0f, 0.0f, 0.6f, 1.0f); // 设置刷新背景色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 刷新背景
glLoadIdentity();
gluLookAt(0,10,64,0,0,0,0,1,0); //观察点
glBindTexture(GL_TEXTURE_2D,oTexture[0]);
glBegin(GL_QUADS);
//地面
glTexCoord2f(-10,-10); glVertex3f(-64,0,-64);
glTexCoord2f(10,-10); glVertex3f(64,0,-64);
glTexCoord2f(10,10); glVertex3f(64,0,64);
glTexCoord2f(-10,10); glVertex3f(-64,0,64);
glEnd();
glBindTexture(GL_TEXTURE_2D,oTexture[1]);
glBegin(GL_QUADS);
//右侧
glTexCoord2f(-10,-10); glVertex3f(64,0,-64);
glTexCoord2f(10,-10); glVertex3f(64,0,64);
glTexCoord2f(10,10); glVertex3f(64,64,64);
glTexCoord2f(-10,10); glVertex3f(64,64,-64);
glEnd();
问题出来了!我无法在两个纹理之间切换,切换完了就是白屏!~求助! |
|