位置: 编程技术 - 正文

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

  • 工会经费计税依据包括社保吗
  • 备用金要用发票做账吗
  • 所有应收账款是否均已记录
  • 增值税普票可以开给个人吗
  • 销项税最后转到哪里
  • 万元版和十万元版可以一起用吗
  • 装修公司帮客户套现装修贷违法吗
  • 合并报表时抵消内部交易包含的未实现损益的影响有哪些
  • 个人代持股票的交易流程
  • 通讯费可以抵扣进项税吗
  • 如何看发票是否被抵扣
  • 水利基金按含税还是不含税申报
  • 消费税暂行条例实施细则
  • 税务非正常户罚款多少
  • 非金融企业利息费用的扣除标准
  • 确认递延收益纳税调整吗
  • 注册资本认缴制开始实施时间
  • 补交前几年的进项发票
  • 工资扣员工的罚款入什么科目
  • 营业外收入政府补贴要交税吗
  • 华为mate手机sim卡怎么插
  • 合伙企业股东个税税率表
  • 部分苹果iOS17功能延后推出
  • 缴纳增值税会计处理
  • 一体机笔记本电脑
  • 销项税和进项税抵扣的会计分录
  • php curl_init
  • 固定资产备案有什么用
  • 银行利息的收入计入什么科目
  • 进项发票和销项发票金额相同还需要交税金吗
  • 小规模纳税人没达到起征点怎么申报
  • 购买理财资金来源规定
  • 企业所得税第二十七条规定
  • python chess库
  • 出口产品报关多少天
  • 旅游业差额开票税率
  • 辞退福利为什么不计入产品成本
  • 个体对公账户是什么意思
  • 小规模纳税人怎么开专票
  • 一般纳税人购销合同印花税减免政策
  • 企业所得税的营业收入怎么填
  • sql2005数据库
  • 外购固定资产对公司影响
  • 开具发票要注意方面是有哪些?
  • 存单丢失了,去哪里挂失
  • 总公司账务处理
  • 代收的车船税没有发票怎么入账
  • 车船税不开发票怎么做账?
  • 职工釆暖费有何新政策
  • 单位收风险金是什么意思
  • 固定资产计提折旧是什么意思
  • 抵账协议上可以签字吗
  • 购买固定资产进项税现金流量
  • 个人出租不动产月租金不超10万免税
  • 员工奖励账务处理流程
  • 销售样品分录
  • 没有发票会怎样
  • 公司销售给客户的感谢信
  • 工程施工企业的会计科目如何设置
  • 年底所得税的会计分录
  • 银行汇票的适用主体
  • mysql优化技巧实战
  • win8系统开机直接进入桌面
  • win10屏幕自动变黄
  • microsoft onedrive怎么关闭
  • ubuntu选择语言
  • winxp系统设置密码
  • 组策略禁用u盘怎么打开
  • win7旗舰版重装系统教程
  • windows mobile
  • win8不能安装软件
  • cocos2dx入门
  • js显示时间并且之后秒数实时更新
  • Node.js中的事件循环是什么样的
  • 读取带敏感字符的行的批处理
  • 在centos上安装pycharm
  • python安装基础教程
  • 高速通行费发票查验
  • 企业所得税的改革与完善
  • 煤矸石占地需要哪些手续
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设