glDrawElements函数如下:

void glDrawElements( GLenum      mode,GLsizei    count,GLenum    type,const GLvoid *     indices);

glDrawElements函数声明如上面,其中最后一个参数表示存放顶点索引的数组。在OPenGL 3.0之前,我们一般直接传入顶点索引数组,如下:

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f);//四个顶点  float pfVer[] = { 0.0f, 0.0f,   0.0f, 2.0f, 0.0f,   0.0f,  2.0f, 2.0f, 0.0f,  0.0f,   2.0f, 0.0f };  //两个面  short indices[] = {0,1,2,  2,3,0 };  glEnableClientState(GL_VERTEX_ARRAY);//启用顶点数组,很重要,否则不显示//参数1:表示该pfVer数组中几个元素表示一个点,这里是三维点,当然是3个数据表示一个点//参数2:指示pfVer数组中元素的数据类型//参数3:表示跨度,这里为0,表示数据元素没有跨度,即依次每3个元素表示一个点//参数4:顶点数据数组glVertexPointer( 3,GL_FLOAT, 0, pfVer );  //指定顶点指针,必须的,指向真正的点数据//这个函数的参数列表前面已经解释过了。我们重点看下,第二个参数,即要画的几何图形的顶点的个数,这里因为要画2个面,每个面3个顶点,所以是6个。//最后一个参数,传递是indicesglDrawElements( GL_TRIANGLE_STRIP,2*3,GL_UNSIGNED_SHORT, indices );  ...... // 后续代码略

而在OPenGl 3.0后,最后一个参数可以直接传NULL,如下:

  // A single trianglestatic const GLfloat vertex_positions[] ={-1.0f, -1.0f,  0.0f, 1.0f,1.0f, -1.0f,  0.0f, 1.0f,-1.0f,  1.0f,  0.0f, 1.0f,-1.0f, -1.0f,  0.0f, 1.0f,};// Color for each vertexstatic const GLfloat vertex_colors[] ={1.0f, 1.0f, 1.0f, 1.0f,1.0f, 1.0f, 0.0f, 1.0f,1.0f, 0.0f, 1.0f, 1.0f,0.0f, 1.0f, 1.0f, 1.0f};static const GLushort vertex_indices[] ={0, 1, 2};// Set up the element array bufferglGenBuffers(1, ebo);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[0]);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(vertex_indices), vertex_indices, GL_STATIC_DRAW);// Set up the vertex attributesglGenVertexArrays(1, vao);glBindVertexArray(vao[0]);glGenBuffers(1, vbo);glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_positions) + sizeof(vertex_colors), NULL, GL_STATIC_DRAW);glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertex_positions), vertex_positions);glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertex_positions), sizeof(vertex_colors), vertex_colors);glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL);glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (const GLvoid *)sizeof(vertex_positions));glEnableVertexAttribArray(0);glEnableVertexAttribArray(1);// Set up for a glDrawElements callglBindVertexArray(vao[0]);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[0]);model_matrix = vmath::translate(-1.0f, 0.0f, -5.0f);glUniformMatrix4fv(render_model_matrix_loc, 1, GL_FALSE, model_matrix);glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, NULL);

当你用glBufferData、glBindVertexArray、glVertexAttribPointer等函数后,OPenGL知道去哪里(索引缓冲区)取索引数据,不用指定最后一个参数。同理:、glDrawElementsBaseVertex函数的倒数第二个参数在OPenGl 3.0或以后也传NULL,该函数在3.0之前不支持。

glDrawElements参数在新旧版本传最后一个参数的不同相关推荐

  1. React新旧版本生命周期对比

    React新旧版本生命周期对比 ❶ 过时生命周期: ① componentWillMount ② componentWillReceiveProps ③ componentWillUpdate ❷ 即 ...

  2. reactjs组件生命周期:componentWillReceiveProps及新旧版本生命周期钩子函数对比

    reactjs组件生命周期:componentWillReceiveProps及新旧版本生命周期钩子函数对比

  3. Intellij IDEA--取消双击shift搜索的方法(包含新旧版本)

    原文网址:Intellij IDEA--取消双击shift搜索的方法(包含新旧版本)_IT利刃出鞘的博客-CSDN博客 简介 Idea, WebStorm, Pycharm这几个Intellij的软件 ...

  4. 内存条上面参数详解_「内存」新旧光威16GB内存条参数对比,发现镁光颗粒

    我第一次买了两条,一条当场翻车了,就换了一条,当时没有发现有任何颗粒上的变化,新旧内存都是南亚颗粒的. 这次我当时同批次的第二条内存翻车了,换来的内存我看了一眼,居然是镁光颗粒的,看来是这批产品有所更 ...

  5. docker Swarm简介 新旧版本操作不一样docker run --rm swarm create和docker swarm --init

    https://www.cnblogs.com/franknihao/p/8490416.html https://cloud.tencent.com/developer/section/109194 ...

  6. 测试吃鸡游戏帧数软件,帧数猛提!新旧版本《绝地求生》实测

    引起全民吃鸡大热潮的国民级大型游戏<绝地求生:大逃杀>与17年12月21日迎来了它的首个正式版,其中最大的改动就是游戏客户端及服务器端的性能优化,通俗地说就是硬件不变的情况下游戏帧数会上涨 ...

  7. android大版本ota,Android OTA升级新旧版本任意升级

    1. Android升级到较新的版本后,想用.zip升级包升回旧的版本时,在升级时会发错.这是由于android系统时对升级文件有版本检测. 2. build/tools/releasetools/o ...

  8. ABP的新旧版本选型

    新版本  (abp vnext ) https://www.abp.io/ ABP是一个开源的应用程序框架ASP.NET基于核心的web应用程序开发,也支持开发其他类型的应用程序. 对旧版本的重写,基 ...

  9. Ubuntu新旧版本下载地址

    官网 https://ubuntu.com/ 中文网站: https://cn.ubuntu.com/ 最新版本下载 点击"下载",即可进入: https://cn.ubuntu. ...

最新文章

  1. 一本教我们如何避免糟糕设计的书
  2. 《强化学习导论》经典课程10讲,DeepMind大神David Silver主讲
  3. 基于linux和php的稳定的分布式数据采集架构
  4. OO ALV 工具栏对于的功能码
  5. How to write an operating system
  6. 【已解决】虚拟机提示VMware Workstation cannot connect to the virtual machine的问题
  7. Base64算法的编程使用
  8. 造车梦又要“窒息”了?贾跃亭被美国认定骗局,收到退市警告!FF回应了......
  9. sh执行文件 参数传递_shell中脚本参数传递的两种方式
  10. 卸载Symantec——无需密码,卸载干净,Windows
  11. 数据结构合并两个有序链表
  12. Mac使用Excel卡顿的提升办法之一
  13. python提取支付宝的账单_python爬取支付宝账单
  14. 基于物联网的室内环境监测系统设计的背景
  15. 读论文-基于循环gan特征增强的夜间车辆检测 Feature Enhancement Based on CycleGAN forNighttime Vehicle Detection
  16. 微信公众号页面分享、禁止分享和显示右上角菜单
  17. Azkaban配置Work Flow案例实操
  18. ipmitool使用手册
  19. linux dd命令
  20. omnipeek安装包亲测可用

热门文章

  1. 印度电工,真牛!上天入海,无所不能...
  2. 使用VHDL编程的直接扩频发生器
  3. MATLAB生成FPGA COE文件之XILINX FPGA滤波器系数
  4. oracle json入参调用ws服务返回请求失败_Spring 5.2.2技术集成 —Spring HTTP调用程序和JAXWS...
  5. 牛客练习赛46 A 华华教奕奕写几何 (简单数学)
  6. cannot import name 'imresize' from 'scipy.misc'
  7. mongodb----集合而定多种查询方式
  8. angular5 接口跨域请求配置
  9. LightOJ 1026 桥 1063 割点
  10. 《Inside C#》笔记(二) 初识C#