位置: 编程技术 - 正文

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

  • 城建税的税目是哪些
  • 车票增值税抵扣如何申报
  • 小企业外币交易的类型有哪些
  • 未入账分期金额是什么意思
  • 非营利机构注册要求
  • 发票采集即征即退怎么填
  • 公共绿地绿化
  • 养老基金利率多少
  • 出借包装物一次摊销金额计算
  • 调整跨期收入是否调增值税
  • 报表的应付款太大怎么调?
  • 企业收到预收账款,能不能给购买方开具发票
  • 股权的溢价是什么意思
  • 2021虚开发票案例
  • 农产品税率2020
  • 小微企业需要开公户吗
  • 水电费的发票要交税吗
  • 上报汇总之后怎么申报
  • 购进材料再销售怎么会计分录
  • 旅行社开具的发票能否作废
  • 以前年度少计收入怎么办
  • 企业涉及预计负债的主要事项包括
  • 收取的开票税点放哪个科目
  • 金税盘可以抵扣进项税吗
  • 参保各险种人数统计
  • remind32.exe - remind32是什么进程 有什么用
  • phpemail正则
  • 青龙面板搭建教程
  • 纳税人提供应税服务
  • 外贸公司出口退税率是多少
  • 图像的生成原理
  • 终于见识到什么叫云横秦岭了
  • 嵌套循环语句
  • php用户登录界面代码
  • 浅谈建筑地基基础加固施工技术亲
  • 会员信息查询系统
  • 转增资本属于什么会计科目
  • 基于python语言
  • mongodb mongoose
  • 织梦相关文章调用
  • 机器维修费属于什么会计科目
  • 公户直接转给私人账户违法么
  • 购买的矿泉水能卖吗
  • db2数据库安装服务器的环境
  • sqlserver避免死锁
  • 小规模增值税纳税人税率
  • 填写备案信息的目的
  • 附加税减免计入什么科目
  • 异地预缴税款怎么抵扣
  • 附加税多计提了怎么做分录
  • 劳务公司在外地
  • 去年多计提的企业所得税怎么调整
  • 退回货款给客户怎么做会计分录
  • 工会赞助费
  • 员工报销的话费要缴纳个税吗?
  • 公司给客户的礼品太差了还需要给客户吗
  • 会计中为什么要用黑色笔写
  • 防伪税控服务费全额抵扣政策
  • 退回拨款会计分录怎么做
  • mysql必知必会 pdf完整版
  • sql server 错误
  • Mysql中几种插入效率的实例对比
  • win7系统一键还原方法
  • win10系统打不开控制面板
  • win8系统启动项在哪
  • xp系统桌面图标怎么设置
  • win7系统设置鼠标灵敏度
  • 你需要windows7sp1才能安装ie11
  • 写出javascript的数据类型
  • 批处理截取字符串
  • unityprefab
  • Python高手之路第3版PDF下载
  • jquery遍历元素并赋值
  • android图片裁剪
  • jquery.js插件
  • javascript图表
  • 2020年陕西省国税局局长
  • 自治区地方税务局于立民简介
  • 烟叶收购价款
  • 河南地税税率怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设