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]

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

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大