位置: 编程技术 - 正文

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

  • 土地入账成本包含哪些
  • 成本结算怎么处理?
  • 银行回单手续费分录
  • 岗位津贴和岗位补贴
  • 累计折旧计入
  • 带薪缺勤会计处理
  • 包工包料和包清工
  • 物业公司临时工的工资可以进成本吗
  • 公司破产后资产怎么处理
  • 企业缴纳社保费一个月多少钱
  • 工厂没给工人买保险会被处罚吗?
  • 330税盘费是什么意思?
  • 税务局代开专用发票要缴纳城建税吗?
  • 增值税税负最终由谁承担
  • 税局定额的标准
  • 增值税专用发票电子版
  • 残疾人保障金中的工资总额包括福利费用吗
  • 专门从事股权投资的合伙企业投资收益 个人所得税
  • 注册中的商标转让
  • 小规模开票软件服务费账务处理
  • 红字发票记账如何记账
  • win7网络无连接
  • 应收票据到期收回时和未到期转让时
  • 已计提但未上缴税款
  • 蝴蝶兰的养殖方法和注意事项视频
  • executor进程
  • 多提附加税跨年怎么计算
  • 被白雪覆盖的彩虹歌词
  • 落日时光
  • 申报个体经营所得税款所属期怎么填
  • 蓝桥杯c题库及答案
  • spring ioc di aop
  • 角点检测算法
  • 时间序列模型ARIMA的优缺点
  • 微信利用php创建文件
  • php jsonp
  • 增值税直接减征的情形
  • 年末本年利润怎么结转
  • 财务报表季报应付职工薪酬为负数
  • 公司食堂吃饭没钱怎么办
  • dedecms官网
  • 股权转让 收益
  • 函数的单调性
  • 免税产品出口是否可以退税
  • 没有发票的公账报销了怎么入账
  • 股东借款怎么转为利润分配
  • 企业的财务报表不包括
  • 债务豁免涉税
  • sql聚合语句
  • 附加税减半征收政策是哪个文件
  • 流动资产周转天数高说明什么
  • 电子承兑背书一般多久到账
  • 实收资本认缴如何做账
  • 异地施工怎么交税
  • 固定资产报废的账务处理
  • 企业代扣税费会计分录
  • 哪些固定资产不需要计提折旧
  • 公司注销后原有未使用的包装还可以用吗怎么办
  • 土地流转的基本原则包括哪些
  • 什么情况下可以安排待岗
  • 分享一下相亲时碰见过哪些奇葩事
  • mysql中的字符串函数
  • mysql查询id最大的记录
  • mysql5.7解压版安装
  • xbox无法连接无线网络
  • kill强制结束进程的参数
  • mac安装软件提示无法检查更新
  • mac局域网控制windows
  • linux的hostname(主机名)修改详解
  • Win7系统打开蓝牙
  • pygame有哪些函数
  • opengl语言
  • 代码的历史
  • node 删除文件
  • bootstrap基础
  • js控制display属性
  • Android dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent详解
  • jquery弹窗弹出一个页面
  • 个体户税务注销
  • 代销手续费增值税会计处理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设