opengl编程指南第8版源码怎么下载、编译,请参考《opengl编程指南第8版源码编译详细说明》

1. 程序启动

请参考《03-drawcommands工程分析详解》

2. vbm二进制结构说明

本工程从vbm结构读取了三维模型。vbm文件的结构是本工程的难点,下面进行讲解:

vbm一个二进制的模型文件,一开始是个 VBM_HEADER 结构,在作者的设计中,该文件分为新版和旧版,旧版的头部结构为 VBM_HEADER_OLD,但是从数据来看,根本就不需要考虑旧版。

在 VBM_HEADER 之后,是若干个 VBM_ATTRIB_HEADER 结构,该结构用来说明每个顶点包含哪些属性,每个属性又包含哪些分量。从数据来看,以上三个模型,都是包含三个属性的,分别是顶点坐标,包含 4 个 GLfloat 分量,顶点法向量,包含 3 个 GLfloat 分量,纹理贴图坐标,包含两个 GLfloat 分量。这和我上一篇中对顶点格式的设计简直一模一样。

在 VBM_ATTRIB_HEADER 之后,是若干个 VBM_FRAME_HEADER,看来该作者设计该格式是可以支持动画的。不过以我扒出的数据来看,以上三个模型文件都只包含一帧。

在 VBM_FRAME_HEADER 之后就是顶点数据。从头文件中可以得到顶点的个数,以及每个顶点包含哪些属性,以及每个属性包含几个分量,就很容易算出顶点数据的长度。

顶点数据之后,就是索引数据。我读源代码,同时还发现顶点数据之后是材质信息。这两组数据是有点混淆的。好在,以我扒出的数据来看,以上三个模型文件既没有使用索引,也没有包含任何材质,那倒是让我省事了不少。

3 glVertexAttribDivisor

glVertexAttribDivisor modifies the rate at which generic vertex attributes advance when rendering multiple instances of primitives in a single draw call. If divisor is zero, the attribute at slot index advances once per vertex. If divisor is non-zero, the attribute advances once per divisor instances of the set(s) of vertices being rendered. An attribute is referred to as instanced if its GL_VERTEX_ATTRIB_ARRAY_DIVISOR value is non-zero.

大概的意思是:当单次调用绘制函数渲染多个图元实例时,glVertexAttribDivisor修改了通用顶点属性向前的比例即每次绘制的步长,即是逐顶点还是每隔divisor 个实例渲染一次。如果参数divisor 是0,则glVertexAttribDivisor函数第一个参数index表示的顶点属性每个顶点就执行渲染一次,如果divisor非0,则参数index表示的顶点属性每隔divisor 实例就渲染一次。这就话的意思说白了就是当divisor 为0时,则每个顶点中参数index表示的顶点属性就渲染一次(逐顶点渲染,以点为单位渲染);而如果divisor非0,则每divisor 实例,就渲染一次。例如:一次渲染100个三角形(这里每个三角形就是一个实例),如果divisor为0,则每个三角形都绘制(逐顶点渲染,以点为单位渲染,当然,这还跟硬件的UFO有关,参考《OpenGL中的Uniform block size 的大小限制》);如果divisor为1,则第0, 1, 2, 3,4,5.....个三角形会被绘制即每个三角形都会被绘制(逐实例渲染,以实例为单位渲染),也就是说每1个三角形才绘制一次(相比前面的divisor为0结果相同,但效率要高很多);如果divisor为3,则第0, 3, 6, 9,12,15......个三角形会被绘制,而第1,2,4,5,7,8,9,10,11,13,14......不会绘制,直接丢弃,也就是说每隔3个三角形才绘制一次,以此类推。

第180行代码为:

 glVertexAttribDivisor(3, 1);

即每个实例都绘制,结果如下:

将第二个参数改为30,即每隔30个实例绘制一次,其间的实例不处理,直接丢弃,结果如下:

可以看到只有第0,30、60、90、120、150、180,共7个VBM绘制了,中间的VBM直接丢弃不处理了。

03-instancing 工程分析详解相关推荐

  1. 03-drawcommands工程分析详解

    opengl编程指南第8版源码怎么下载.编译,请参考<opengl编程指南第8版源码编译详细说明> 1 程序启动 C++的程序都是从main函数启动的,但是这工程咋一看死活找不到main, ...

  2. wav文件格式分析详解

    wav文件格式分析详解 作者:曹京 日期:2006年7月17日 一.综述     WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的. RIFF是英文Resource Inte ...

  3. R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据

    R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据 目录

  4. Memcache的使用和协议分析详解

    Memcache的使用和协议分析详解 作者:heiyeluren 博客:http://blog.csdn.net/heiyeshuwu 时间:2006-11-12 关键字:PHP Memcache L ...

  5. R语言生存分析详解:KM曲线、COX比例风险模型、HR值解读、模型比较、残差分析、是否比例风险验证:基于survival包lung数据集

    R语言生存分析详解:KM曲线.COX比例风险模型.HR值解读.模型比较.残差分析.是否比例风险验证:基于survival包lung数据集 目录

  6. keil创建工程没有atmel_keil创建工程步骤详解

    iPhone的ECID是什么? ECID就是iPhone的身份证号,每一个iPhone都有自己的独特的ECID,有了这个ECID,就能确定一部iPhone的信息,获取方式可以通过在手机查看.查看注册表 ...

  7. 【轨话直说】化妆品行业某叶直销行业模式奖金制度分析详解教程

    [轨话直说]专注分析各类直销.分销.新零售等模式的奖金制度.让你更加了解直销模式和奖金制度拨比的秘密和作用.如果你也对直销分销等模式比较感兴趣,可以联系我,一起交流一起学习. [轨话直说]化妆品行业某 ...

  8. SIMPLIS仿真软件4-POP分析详解

    SIMPLIS仿真软件4-POP分析详解 导读 POP分析的工作原理 POP核心进程 仿真时出现的一些常见的错误 导读 本文将对SIMPLIS中的POP分析进行详细的介绍.包括POP的工作原理,仿真时 ...

  9. 线程组ThreadGroup分析详解 多线程中篇(三)

    线程组,顾名思义,就是线程的组,逻辑类似项目组,用于管理项目成员,线程组就是用来管理线程. 每个线程都会有一个线程组,如果没有设置将会有些默认的初始化设置 而在java中线程组则是使用类ThreadG ...

最新文章

  1. web移动端Fixed在Input获取焦点时ios下产生的BUG及处理
  2. Activity的四种launchMode
  3. 面试题SMKJ——no.1
  4. Why expand does not work for complex note
  5. 美国正面临“人才泡沫”破裂危机?
  6. 关于蓝牙服务UUID自定义简介
  7. 误删docker0网桥之后怎么办呢?
  8. JQuery中淡出和淡入动画效果
  9. 餐饮为什么很难做到薄利多销?
  10. qutebrowser 只用键盘操作的浏览器
  11. b站上的计算机课程有哪些,B站课程排行榜,这届大学生最爱学什么?
  12. 族蚂网针对宠物网站建设有哪些新体验
  13. 还在加班?你应该把生命浪费在美好的事物上
  14. 破土Plan遇到的keng
  15. XtraReport绑定数据源的三种方式
  16. 网站添加百度分享工具的好处
  17. matlab直观数据处理,霍尔效应实验的MATLAB数据处理
  18. 【Alist + Teracloud】WebDAV免费畅游互联网个人方案总结,一些支持WebDAV的应用推荐
  19. 蓝桥杯java B组历年省赛真题汇总及题目详解
  20. docker: error pulling image configuration:timeout

热门文章

  1. CADENCE ORCAD原理图导出FPGA UCF的方法
  2. html 属性中嵌套php,如何在PHP中使用嵌套数组创建HTML数据属性字符串?
  3. 自动检测CSRF漏洞的工具
  4. html3d上下翻转4面效果,花式实现图片3D翻转效果
  5. c语言文学研究助手题目,各位达人,给小弟一个文学研究助手的c程序啊!急啊!谢谢大家啦!...
  6. 牛客练习赛44 B 小y的线段 (思维)
  7. 【bzoj1597】 土地购买
  8. 第二阶段 工作总结 05
  9. jQuery lazyload插件详解和问题解答
  10. Java 语法 索引 ----- 泛型(Generics)