位置: 编程技术 - 正文

OpenGL编程逐步深入(十)索引绘制(简述opengl的编程步骤)

编辑:rootadmin
准备知识

推荐整理分享OpenGL编程逐步深入(十)索引绘制(简述opengl的编程步骤),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl csdn,opengl编程精粹,opengl gpu编程,opengl编程实例,opengl编程实例,opengl编程语言,opengl 编程,opengl 编程,内容如对您有帮助,希望把文章链接给更多的朋友!

OpenGl提供了一些绘图函数。到目前为止我们使用的glDrawArrays绘图函数属于”顺序绘制”。这意味着顶点缓冲区从指定的偏移量开始被扫描,每X(点为1,直线为2等)个顶点构成一个图元。这样使用起来非常方便,缺点是当多个图元共用一个顶点时,这个顶点必须在顶点缓冲区中出现多次。也就是说,这些顶点没有共享的概念。属于”索引绘制”的函数则提供这种共享机制。我们除了一个顶点缓存区外,还有一个索引缓存区用来存放顶点的索引值。索引缓存区的扫描和顶点缓存区类似,以每X个索引对应的顶点构成一个基本图元。共享机制在提高内存使用效率上非常重要,因为计算机中的绝大多数图形对象都是三角形网格构成的,这些三角形有很多都是共用顶点。

我们来看一下顺序绘制:

如果是绘制三角形,GPU会将这些顶点分成以下几组:V0/1/2, V3/4/5, V6/7/8。

接下来看一下索引绘制:

这种情况下,GPU会使用这几组顶点来绘制三角形:V2/0/1, V5/2/4, V6/5/7。

使用索引绘制方式需要创建索引缓冲区,索引缓存区中的数据还要受到顶点缓冲区的限制,绘图调用的API函数也和之前不同。

项目配置

参见前面的教程。

程序代码

清单1.主程序代码tutorial.cpp

代码解读OpenGL编程逐步深入(十)索引绘制(简述opengl的编程步骤)

创建索引缓存句柄,对索引缓冲区的操作通过该句柄完成。

为了演示顶点共享,我们需要更复杂的网格模型。很多教程都使用旋转立方体来演示这个知识点,这需要8个顶点和个三角形。这里我们使用旋转四面体代替,它只需要4个顶点和4个三角形。

当我们从上面(即沿着Y轴)观看这些顶点时,顶点布局如下图所示:

索引缓冲区由一个索引数组组成,每个索引对应顶点缓冲区中的一个顶点。同时观察索引数组和上面的顶点分布图会发现最后一个三角形构成四面体的底面,另外三个三角形作为侧表面(这个例子中四面体并不是对称的)。

上面代码用于创建索引缓冲区并向其中填充数据,不同的是这里使用的参数是GL_ELEMENT_ARRAY_BUFFER,而创建顶点缓冲区使用的参数为GL_ARRAY_BUFFER。

和顺序绘制方式一样,在绘制之前我们也要调用glBindBuffer,同时使用GL_ELEMENT_ARRAY_BUFFER作为参数。

这里我们需要使用glDrawElements代替glDrawArrays。第一个参数指定要绘制的图元类型,第二个参数指定用来生成图元的索引数量,第三个参数是每个索引的数据类型,这里可供选择的有GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT。最后一个参数用来告诉GPU开始扫描索引缓冲区的偏移量,这里指定为0,表明从第一个索引开始。这个参数是非常有用的,因为有时候多个模型的顶点索引存放在同一个索引缓冲区。

运行效果

可以看到一个四面体在窗口中旋转。

OpenGL轨迹球代码 转自:

Cocos openGL编写自己的Shaders cocos2d-x3.5,lua环境下实现按钮变灰;代码调用:localprogram=cc.GLProgram:create(Shaders/Gray.vsh,Shaders/Gray.fsh)program:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION,cc.VERTEX_ATTRIB

OpenGL--选择和反馈 理论基础选择和反馈:整的来说就是鼠标点击,然后算出到底点击的是哪个物体。在选择和反馈模式下,绘制信息返回给应用程序而不是像在渲染模式

标签: 简述opengl的编程步骤

本文链接地址:https://www.jiuchutong.com/biancheng/369595.html 转载请保留说明!

上一篇:OpenGL--二次几何体(opengl二维绘图函数)

下一篇:OpenGL轨迹球代码(轨迹球怎么调出来)

  • 原材料的采购成本包括运费吗
  • 非税收入包括哪些来源
  • 违约金的专票能抵扣吗
  • 付境外公司佣金怎么做账
  • 为什么差额征税有的可以开专票有的只能开普票
  • 退回资本金要交税吗
  • 小规模纳税人的增值税账务处理
  • 盘盈的存货一般作为什么处理
  • 转让股权原值的相关资料
  • 公司付给职工的工资
  • 土地使用权摊销的会计分录
  • 小规模纳税人可以转为一般纳税人吗?
  • 计提以前年度税金
  • 忘了报税算偷税漏税吗
  • 减免附加税还要计提吗
  • 没有费用报销单发票可以直接报销吗
  • 一般纳税人增值税申报表
  • 办公室购买绿植违规吗
  • 未成立工会的企业、事业单位
  • 低于成本价销售的税务风险
  • 企业风险应对的基本类型包括
  • 员工的水电费计入什么科目
  • 高新企业研发人员
  • 应收账款质押账户被冻结
  • 怎么计算附加税税率
  • 权利,许可证照印花税
  • 651错误是怎么回事
  • 其他债权投资的交易费用计入什么科目
  • 社会保险费的征收程序
  • 刷信用卡没手续费
  • 多系统设置
  • 如何在电脑管家里把健康小程序提取出
  • php实现的一致性是什么
  • 简易征收税务处理
  • plugin.exe是什么进程
  • 什么叫存量房转移登记
  • 查询数据库的7个标准步骤
  • PHP:imagesettile()的用法_GD库图像处理函数
  • 应收账款净额可以是负数吗
  • 购买税控盘后要交税吗
  • 计算完工产品成本和在产品成本的方法有哪些
  • 怎么把html转成图片
  • 企业以前年度亏损不可以用什么弥补
  • 职工慰问金账务处理流程
  • 微擎框架安装教程
  • 帝国cms配置数据库
  • 帝国cms8.0
  • 怎样合理的运用网络
  • 商贸公司库存商品有哪些
  • centos7.9 防火墙
  • 差额征税好吗
  • 多计提的个税能退回给员工吗
  • 只有收据没有发票怎么入账
  • 费用报销单如何粘贴票据
  • 库存商品什么时候确认收入
  • 多栏式日记账核算组织程序优缺点
  • 负担、支付所得的企业
  • 暂估入库后发票来不了会计分录
  • 营业执照过期多久不能审
  • drop table select
  • win7旗舰版系统激活码
  • centos6.5mini安装教程
  • executor进程
  • xp系统设置局域网
  • win10通讯设置在哪
  • win8光盘安装
  • mac怎么安装安装包
  • 如何使用调制解调器
  • Win10装不上是什么原因
  • win10预览版和正式版区别
  • python生成二维码添加图片
  • Immutable 在 JavaScript 中的应用
  • 学习名言警句 励志
  • dos批处理命令大全
  • 杨辉三角的代码
  • numpy使用心得
  • python全角半角
  • js读取文件大小
  • 所得税调增调减搞不清
  • 季度申报成功与否怎么查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设