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 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问
  • ¥15 速度位置规划实现精确定位的问题
  • ¥15 代码问题:df = pd.read_excel('c:\User\18343\Desktop\wpsdata.xlxs')路径读不到
  • ¥15 为什么视频算法现在全是动作识别?
  • ¥15 编写一段matlab代码
  • ¥15 用Python做岩石类别鉴定软件
  • ¥15 关于调取、提交更新数据库记录的问题
  • ¥15 之前删了盘从下vs2022遇见这个问题 搞了一整天了
  • ¥15 从Freecad中宏下载的DesignSPHysics,出现如下问题是什么原因导致的(语言-python)
  • ¥30 notepad++ 自定义代码补全提示