位置: 编程技术 - 正文

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轨迹球代码(轨迹球怎么调出来)

  • 发票超过认证期有什么影响
  • 税金及附加包括印花税吗
  • 网线的税收编码是多少
  • 中小企业现金流量表
  • 企业所得税纳税人包括哪些类型
  • 总公司向子公司收取管理费如何纳税
  • 劳务费做账是否需要发票
  • 增资后调减资本怎么计算
  • 电子商务支付平台有哪些
  • 一般账户网银可以发工资吗
  • 当月确认收入下月开票
  • 增值税发票抵扣进项税什么意思
  • 个人独资企业改为有限公司
  • 企业所得税期末贷方余额怎么办
  • 小规模纳税人核定征收怎么报税
  • 企业为职工支付的家庭财产保险
  • 不征税收入税屋
  • 收到未抵扣的红字发票
  • 专项应付款现在叫什么
  • 合理损耗算入账价值吗
  • 担保扶持基金可以冲代偿吗
  • 软件开发并销售怎么做
  • 公司收到预付款怎么用处去
  • PHP:imagesavealpha()的用法_GD库图像处理函数
  • PHP:finfo_open()的用法_fileinfo函数
  • 承包经营税率表
  • 购买专利权的会议纪要
  • 人力资源规划系统包括哪些主要内容
  • laravel框架关键技术解析
  • 土地价款扣除会计分录
  • php实现删除功能
  • 非上市员工持股
  • 一年一度的施瓦本哈尔圣诞市集,德国巴登-符腾堡州 (© sack/Getty Images Plus)
  • php多文件上传代码
  • Python深度学习实战:人脸关键点(15点)检测pytorch实现
  • php生成csv文件
  • 公司有收入可不交社保吗
  • 进口关税账务处理办法
  • c语言中sizeof是啥意思
  • 代开专票时缴纳的增值税账务处理如何做?
  • 利用python创建文件
  • mysql索引和主键
  • 独资企业的税收政策
  • 财产清查两种制度
  • 企业购买随时准备出售的债券
  • 开具发票后,如发生销售退回,通常有的两种处理方式是?
  • 小规模防伪税控服务费多少钱
  • 房地产开发企业会计制度
  • 去年多计提的所得税怎么处理
  • 公允价值变动损益在利润表哪里
  • 基金可以一次性全部卖出吗
  • 融资租赁财产保全金额是多少
  • 资产减值损失是负的意味着什么
  • 销售包装物计入其他应收款吗
  • 工程未竣工预付款怎么办
  • 固定资产转为投资的条件
  • 其他业务收入如何填写增值税申报表
  • 未分配利润转增股本要交税吗怎么交
  • 电话费计入什么二级科目
  • 会计账簿的含义及其作用
  • 什么叫归集和分配
  • mysql 生成guid
  • 修改mysql数据库字符集
  • sql高级语句实例
  • sqlserver not in 语句使程充崩溃
  • 用友t6运行特别慢
  • spoolsv.exe是什么文件
  • slserves.exe - slserves是什么进程
  • win8系统没有无线网络连接
  • 删除同步中心图标
  • win8鼠标指针不见了
  • glsl fract
  • javascript冒泡排序代码
  • 批处理常用命令及用法大全
  • Node.js中的全局对象有
  • shell脚本 \r
  • unity3d脚本怎么用
  • javascript构造函数可继承父类的构造函数
  • python 分析
  • 如何在税务系统增加开票人员
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设