zzllvlv 2017-08-19 12:35 采纳率: 100%
浏览 973
已采纳

关于opengl管理纹理对象的问题

蓝宝书上生成三个mip贴图的代码如下:
for(iLoop = 0; iLoop < TEXTURE-COUNT; iLoop++)
{
// Bind to next texture object
glBindTexture(GL_TEXTURE_2D, textures[iLoop]);

    // Load texture, set filter and wrap modes
    pBytes = gltReadTGABits(szTextureFiles[iLoop],&iWidth, &iHeight,
                          &iComponents, &eFormat);

    // Load texture, set filter and wrap modes
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexImage2D(GL_TEXTURE_2D, 0, iComponents, iWidth, iHeight, 0, eFormat, GL_UNSIGNED_BYTE, pBytes);
    glGenerateMipmap(GL_TEXTURE_2D);
    // Don't need original texture data any more
    free(pBytes);
    }
            示例代码通过不断的调用 glBindTexture(GL_TEXTURE_2D, textures[i])来使用这三个纹理对像。我想知道这三个纹理对象是如何管理的。是在GL_TEXTURE_2D这个变量中分别储存多个纹理,并通过纹理对象名来调用的吗?
  • 写回答

1条回答 默认 最新

  • shifenglv 2017-08-20 03:46
    关注

    纹理数据都被保存在显存中,内存中那个unint类型的texture[i]其实就是纹理对象的索引,或者说编号。要使用某个纹理时,就通过编号找到对应的纹理,即通过glBindTextre函数绑定纹理
    GL_TEXTURE_2D不是变量,而是常量,在头文件里边你可以看到这个常量的宏,根据这个常量来确定要绑定纹理的类型。纹理有好几种的,有1D,2D,3D,代表纹理类型分别为GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D。这些常量不会保存纹理数据,仅仅是告诉函数将要绑定什么类型的纹理。
    所有的纹理数据都在显卡中,所以一旦纹理创建完毕,你可以放心地删除内存中的照片。你要选择纹理,只能通过索引,也就是你定义那个texture[i]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 刚接触VFP,我想知道为什么是这种情况,有人可以看看吗
  • ¥15 io.jsonwebtoken.security.Keys
  • ¥15 急,ubuntu安装后no caching mode page found等
  • ¥15 联想交换机NE2580O/NE1064TO安装SONIC
  • ¥15 防火墙的混合模式配置
  • ¥15 Ubuntu不小心注销了要怎么恢复啊
  • ¥15 win10电脑安装完plcsim advanced4.0运行时为什么会提示找不到虚拟网卡
  • ¥15 安装powerbuilder10卡在安装程序正在运行这个页面 没有下一步任何指令
  • ¥15 关于mpi的问题:请问遇到这种情况需要怎么解决,出现这个问题后电脑不能进行mpi多核运行只能进行单核运行
  • ¥50 微信聊天记录备份到电脑提示成功了,但还是没同步到电脑微信