glDrawElements参数在新旧版本传最后一个参数的不同
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参数在新旧版本传最后一个参数的不同相关推荐
- React新旧版本生命周期对比
React新旧版本生命周期对比 ❶ 过时生命周期: ① componentWillMount ② componentWillReceiveProps ③ componentWillUpdate ❷ 即 ...
- reactjs组件生命周期:componentWillReceiveProps及新旧版本生命周期钩子函数对比
reactjs组件生命周期:componentWillReceiveProps及新旧版本生命周期钩子函数对比
- Intellij IDEA--取消双击shift搜索的方法(包含新旧版本)
原文网址:Intellij IDEA--取消双击shift搜索的方法(包含新旧版本)_IT利刃出鞘的博客-CSDN博客 简介 Idea, WebStorm, Pycharm这几个Intellij的软件 ...
- 内存条上面参数详解_「内存」新旧光威16GB内存条参数对比,发现镁光颗粒
我第一次买了两条,一条当场翻车了,就换了一条,当时没有发现有任何颗粒上的变化,新旧内存都是南亚颗粒的. 这次我当时同批次的第二条内存翻车了,换来的内存我看了一眼,居然是镁光颗粒的,看来是这批产品有所更 ...
- 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 ...
- 测试吃鸡游戏帧数软件,帧数猛提!新旧版本《绝地求生》实测
引起全民吃鸡大热潮的国民级大型游戏<绝地求生:大逃杀>与17年12月21日迎来了它的首个正式版,其中最大的改动就是游戏客户端及服务器端的性能优化,通俗地说就是硬件不变的情况下游戏帧数会上涨 ...
- android大版本ota,Android OTA升级新旧版本任意升级
1. Android升级到较新的版本后,想用.zip升级包升回旧的版本时,在升级时会发错.这是由于android系统时对升级文件有版本检测. 2. build/tools/releasetools/o ...
- ABP的新旧版本选型
新版本 (abp vnext ) https://www.abp.io/ ABP是一个开源的应用程序框架ASP.NET基于核心的web应用程序开发,也支持开发其他类型的应用程序. 对旧版本的重写,基 ...
- Ubuntu新旧版本下载地址
官网 https://ubuntu.com/ 中文网站: https://cn.ubuntu.com/ 最新版本下载 点击"下载",即可进入: https://cn.ubuntu. ...
最新文章
- 一本教我们如何避免糟糕设计的书
- 《强化学习导论》经典课程10讲,DeepMind大神David Silver主讲
- 基于linux和php的稳定的分布式数据采集架构
- OO ALV 工具栏对于的功能码
- How to write an operating system
- 【已解决】虚拟机提示VMware Workstation cannot connect to the virtual machine的问题
- Base64算法的编程使用
- 造车梦又要“窒息”了?贾跃亭被美国认定骗局,收到退市警告!FF回应了......
- sh执行文件 参数传递_shell中脚本参数传递的两种方式
- 卸载Symantec——无需密码,卸载干净,Windows
- 数据结构合并两个有序链表
- Mac使用Excel卡顿的提升办法之一
- python提取支付宝的账单_python爬取支付宝账单
- 基于物联网的室内环境监测系统设计的背景
- 读论文-基于循环gan特征增强的夜间车辆检测 Feature Enhancement Based on CycleGAN forNighttime Vehicle Detection
- 微信公众号页面分享、禁止分享和显示右上角菜单
- Azkaban配置Work Flow案例实操
- ipmitool使用手册
- linux dd命令
- omnipeek安装包亲测可用
热门文章
- 印度电工,真牛!上天入海,无所不能...
- 使用VHDL编程的直接扩频发生器
- MATLAB生成FPGA COE文件之XILINX FPGA滤波器系数
- oracle json入参调用ws服务返回请求失败_Spring 5.2.2技术集成 —Spring HTTP调用程序和JAXWS...
- 牛客练习赛46 A	华华教奕奕写几何 (简单数学)
- cannot import name 'imresize' from 'scipy.misc'
- mongodb----集合而定多种查询方式
- angular5 接口跨域请求配置
- LightOJ 1026 桥 1063 割点
- 《Inside C#》笔记(二) 初识C#