位置: 编程技术 - 正文

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

  • 组成计税价格的公式
  • 食堂用固定资产可以抵扣吗
  • 筹资现金流量净额为负说明了什么问题
  • 开私家车出差如何报销差旅费
  • 预计销售收入增长是什么意思
  • 一般纳税人建筑工程税率是多少
  • 小规模季度报税流程
  • 分步法和分批法思维导图
  • 房屋预售交款怎么交
  • 公益性支出所得税扣除比例
  • 教育费附加计费单位
  • 往年预付账款错了,应如何调?
  • 应交税金减免税金需要结转吗
  • 单位车转到个人名下要什么材料
  • 每月计提折旧
  • 长期借款利息的会计分录
  • 增值税专用发票的税率是多少啊
  • 电子承兑汇票支付信用查询
  • 企业的养老金根据什么扣除
  • 企业银行基本户
  • 资产负债表里面的应收账款包括哪些
  • 库存商品售价
  • 开业庆典的活动内容
  • 小型微利企业的优惠政策
  • 日历怎么不能添加事件了
  • 生产企业委外加工比例出口免抵退税
  • 用银行存款支付本季度短期借款利息
  • 销售费用的作用
  • 手机怎么设置无信号
  • vue-router跳转
  • 实行核定征收印花税的纳税期限为一个月税额较小的
  • php 可变变量
  • 结转已销售产品的实际生产成本会计分录
  • vue3项目中使用el-dialog
  • nodejs搭建http服务器接收请求
  • 支付兼职工资账务处理
  • 小规模纳税人货款怎么算
  • 公司购买黄金送客户可以取得进项抵税吗
  • springboot怎么配置拦截器
  • wordpress删除修订版本
  • 帝国cms移动端
  • 房地产城建税计税依据
  • 项目终止前期费用核销
  • 控股股东变更,业务有望质变的公司
  • 股权分配和利润的关系
  • 纳税人减免税申请表怎么填
  • 我国会计制度对会计要求
  • 个税征税对象包括哪些
  • 总分类账的登记依据和方法取决于企业所采用的
  • 出售不动产账务处理流程
  • 盘亏盘盈的会计处理
  • 营业收入和利润的区别
  • 固定资产折旧方法不考虑净残值
  • 销售不动产计税税率
  • 收到保险公司保险费会计分录
  • 摊销方法如何选择
  • 固定资产怎么折旧有几种方法
  • 车船使用税会计分录怎么写
  • sql批量替换字符串
  • select into 和 insert into select 两种表复制语句
  • mysql免安装版下载
  • windowsserver2008r2standard激活
  • linux解释
  • centos 任务计划
  • freebsd使用
  • 主板不支持u盘装系统怎么办
  • winxp不显示桌面图标
  • gcasSWUpdater.exe是什么进程 有什么作用 gcasSWUpdater进程查询
  • linux安装atop
  • Win10预览版拆弹
  • 微软认为
  • cocos2dx官方教程
  • shell 计算表达式
  • javascript中函数
  • 基于javascript的毕业设计
  • android datagridview
  • 手写发票属于增值税普通发票吗
  • 进项发票的税收分类编码怎么查询
  • 1月纳税申报截止时间
  • 津补贴怎么算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设