OpenGL的glTexImage2D()与gluBuild2DMipmaps()的使用方法及区别

说明:两者的都是生成纹理,即:将载入的位图文件(*.bmp)转换成纹理贴图。

1、glTexImage2D()介绍

先看glTexImage2D()函数定义:

void glTexImage2D(GLenum target,
          GLint level,
          GLint internalFormat,
          GLsizei width,
          GLsizei height,
          GLint border,
          GLenum format,
          GLenum type,
          const GLvoid * data);

再看glTexImage2D()用法举例:

glTexImage2D(GL_TEXTURE_2D,  //此纹理是一个2D纹理
        0,          //代表图像的详细程度, 默认为0即可
        3,          //颜色成分R(红色分量)、G(绿色分量)、B(蓝色分量)三部分,若为4则是R(红色分量)、G(绿色分量)、B(蓝色分量)、Alpha
        TextureImage[0]->sizeX,  //纹理的宽度
        TextureImage[0]->sizeY,  //纹理的高度
        0,          //边框的值
        GL_RGB,      //告诉OpenGL图像数据由红、绿、蓝三色数据组成
        GL_UNSIGNED_BYTE,    //组成图像的数据是无符号字节类型
        TextureImage[0]->data);  //告诉OpenGL纹理数据的来源,此例中指向存放在TextureImage[0]记录中的数据

2、gluBuild2DMipmaps()介绍

先看gluBuild2DMipmaps()函数定义:

int gluBuild2DMipmaps (GLenum target,
            GLint components,
            GLint width,
            GLint height,
            GLenum format,
            GLenum type,
            const void *data);

再看gluBuild2DMipmaps()用法举例:
gluBuild2DMipmaps(GL_TEXTURE_2D,  //此纹理是一个2D纹理
          3,            //颜色成分R(红色分量)、G(绿色分量)、B(蓝色分量)三部分,若为4则是R(红色分量)、G(绿色分量)、B(蓝色分量)、Alpha
          TextureImage[0]->sizeX,  //纹理的宽度
          TextureImage[0]->sizeY,  //纹理的高度
          GL_RGB,       //告诉OpenGL图像数据由红、绿、蓝三色数据组成
          GL_UNSIGNED_BYTE,    //组成图像的数据是无符号字节类型
          TextureImage[0]->data);  //告诉OpenGL纹理数据的来源,此例中指向存放在TextureImage[0]记录中的数据

3、glTexImage2D()和gluBuild2DMipmaps()区别

glTexImage2D()和gluBuild2DMipmaps()使用注意事项:
使用glTexImage2D()时所采用的位图文件分辨率必须为:64×64、128×128、256×256三种格式,如果其他大小则会出现绘制不正常。
gluBuild2DMipmaps()支持任意分辨率位图文件。

OpenGL的glTexImage2D()与gluBuild2DMipmaps()的使用方法及区别的更多相关文章

  1. ThinkPHP的D方法和M方法的区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  2. 正则表达式中的exec和match方法的区别

    正则表达式中的exec和match方法的区别 字符串的正则方法有:match().replace().search().split() 正则对象的方法有:exec().test() 1.match m ...

  3. Hibernate框架之get和load方法的区别

    我们在学习Hibernate框架时,经常会进行修改,删除操作,对于这些操作,我们都应该先加载对象,然后在执行或删除的操作,那么这里Hibernate提供了两种方法按照主键加载对象,也就是我要说的get ...

  4. [BS-27] 创建NSURL的几个方法的区别

    创建NSURL的几个方法的区别     URL的基本格式 = 协议://主机地址/路径 URL和Path的区别 * URL:统一资源定位符,格式 “协议+主机名称+路径”   例如:[NSURL UR ...

  5. Java线程中yield与join方法的区别

    长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...

  6. Java线程中run和start方法的区别

    http://bbs.csdn.net/topics/350206340 Thread类中run()和start()方法的区别如下:run()方法:在本线程内调用该Runnable对象的run()方法 ...

  7. M方法和D方法的区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  8. PHP中数组合并的两种方法及区别介绍

    PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = ...

  9. 执行shell脚本的几种方法及区别

    执行shell脚本的几种方法及区别 http://blog.csdn.net/lanxinju/article/details/6032368 (认真看) 注意:如果涉及到脚本之间的调用一定要用 . ...

随机推荐

  1. javascript 隐性类型转换步骤

    这里说的隐性类型转换,是==引起的转换. 如果存在NaN,一律返回false 再看有没有布尔,有布尔就将布尔转换为数字 接着看有没有字符串, 有三种情况,对方是对象,对象使用toString进行转换: ...

  2. databasefactory.createdatabase Web.config 配置关键点提醒

    <configuration>  <configSections>    <section name="dataConfiguration" type ...

  3. video和audio

    1.video 使用: <video width="320" height="240" src="http://www.jb51.net/mov ...

  4. jqzoom图片放大镜

    jqzoom是一个图片放大器插件.它功能强大,使用简便! 引入js与css: <script type="text/javascript" src="js/jque ...

  5. paramiko模块,线程,进程

    关于paramiko模块 paramiko是基于Python实现的ssh2远程安全连接,支持认证及密钥方式远程执行命令.文件传输,中间ssh代理等 paramiko的安装: 安装好之后,用parami ...

  6. ios每日一发--Leanclude数据云存储以及登录 注册账户

    利用LeanCloud来实现注册账号,存储账号以及,登录时查询账号是否正确.集成方式很简单可以看这里的官方文档.地址是这里: https://leancloud.cn/docs/ 在这里创建应用,以及 ...

  7. Lua JSONRPC学习笔记

    JSON RPC JSON RPC 为利用json数据格式来执行远程调用方式, 作用同xmlrpc,不过与xmlrpc相比, jsonrpc更加轻量,json更加节省数据量,更加可读性高. 官网网站: ...

  8. 安装eclipse与pydev

    按照此文档 最简单的eclipse安装方法 sudo apt-get install eclipse 弊端:因为ubuntu默认安装的不是最新版本的eclipse,所以你也不能安装最新的pydev. ...

  9. TCP中异常关闭链接的意义 异常关闭的情况

    终止一个连接的正常方式是发送FIN. 在发送缓冲区中 所有排队数据都已发送之后才发送FIN,正常情况下没有任何数据丢失. 但我们有时也有可能发送一个RST报文段而不是F IN来中途关闭一个连接.这称为 ...

  10. cocos2d-x使用AssetsManager类实现资源的在线更新

    从2.1.2版本开始,2dx在libExtensions下添加了一个AssetsManager类用于资源的在线更新和简单的版本管理,同时添加了AssetsManagerTest项目示范了AssetsM ...