游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3980|回复: 6

多个纹理切换问题!

[复制链接]

13

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
发表于 2007-8-29 18:04:00 | 显示全部楼层 |阅读模式
//从文件创建纹理
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();



问题出来了!我无法在两个纹理之间切换,切换完了就是白屏!~求助!

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2007-8-29 18:14:00 | 显示全部楼层

Re:多个纹理切换问题!

up

13

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
 楼主| 发表于 2007-8-29 22:12:00 | 显示全部楼层

Re:多个纹理切换问题!

up

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-8-29 23:45:00 | 显示全部楼层

Re:多个纹理切换问题!

CreateTexture(char *filename,GLuint texture)

texture只是个形参。

改成
CreateTexture(char *filename,GLuint& texture)

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2007-8-30 09:17:00 | 显示全部楼层

Re:多个纹理切换问题!

基本C问题

13

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
 楼主| 发表于 2007-8-30 13:29:00 | 显示全部楼层

Re: Re:多个纹理切换问题!

Enigmaya: Re:多个纹理切换问题!

CreateTexture(char *filename,GLuint texture)

texture只是个形参。

改成
CreateTexture(char *fil...



正解!感谢回复!~

1

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2008-1-4 09:54:00 | 显示全部楼层

Re: 多个纹理切换问题!

为什么mfc框架下调用这两个函数:
void baiscobj::texture(UINT textur)//设置贴图滤波
{        glBindTexture  (GL_TEXTURE_2D, textur);// 设置贴图
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
        ///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_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
}
bool baiscobj:oadT8(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;                         // 返回成功
}
在初始化中LoadT8("j.bmp",g_texture[0]);
调用时 glBindTexture  (GL_TEXTURE_2D,g_cactus[0]);
却什么也没有。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-19 09:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表