03-instancing 工程分析详解
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 工程分析详解相关推荐
- 03-drawcommands工程分析详解
opengl编程指南第8版源码怎么下载.编译,请参考<opengl编程指南第8版源码编译详细说明> 1 程序启动 C++的程序都是从main函数启动的,但是这工程咋一看死活找不到main, ...
- wav文件格式分析详解
wav文件格式分析详解 作者:曹京 日期:2006年7月17日 一.综述 WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的. RIFF是英文Resource Inte ...
- R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据
R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据 目录
- Memcache的使用和协议分析详解
Memcache的使用和协议分析详解 作者:heiyeluren 博客:http://blog.csdn.net/heiyeshuwu 时间:2006-11-12 关键字:PHP Memcache L ...
- R语言生存分析详解:KM曲线、COX比例风险模型、HR值解读、模型比较、残差分析、是否比例风险验证:基于survival包lung数据集
R语言生存分析详解:KM曲线.COX比例风险模型.HR值解读.模型比较.残差分析.是否比例风险验证:基于survival包lung数据集 目录
- keil创建工程没有atmel_keil创建工程步骤详解
iPhone的ECID是什么? ECID就是iPhone的身份证号,每一个iPhone都有自己的独特的ECID,有了这个ECID,就能确定一部iPhone的信息,获取方式可以通过在手机查看.查看注册表 ...
- 【轨话直说】化妆品行业某叶直销行业模式奖金制度分析详解教程
[轨话直说]专注分析各类直销.分销.新零售等模式的奖金制度.让你更加了解直销模式和奖金制度拨比的秘密和作用.如果你也对直销分销等模式比较感兴趣,可以联系我,一起交流一起学习. [轨话直说]化妆品行业某 ...
- SIMPLIS仿真软件4-POP分析详解
SIMPLIS仿真软件4-POP分析详解 导读 POP分析的工作原理 POP核心进程 仿真时出现的一些常见的错误 导读 本文将对SIMPLIS中的POP分析进行详细的介绍.包括POP的工作原理,仿真时 ...
- 线程组ThreadGroup分析详解 多线程中篇(三)
线程组,顾名思义,就是线程的组,逻辑类似项目组,用于管理项目成员,线程组就是用来管理线程. 每个线程都会有一个线程组,如果没有设置将会有些默认的初始化设置 而在java中线程组则是使用类ThreadG ...
最新文章
- web移动端Fixed在Input获取焦点时ios下产生的BUG及处理
- Activity的四种launchMode
- 面试题SMKJ——no.1
- Why expand does not work for complex note
- 美国正面临“人才泡沫”破裂危机?
- 关于蓝牙服务UUID自定义简介
- 误删docker0网桥之后怎么办呢?
- JQuery中淡出和淡入动画效果
- 餐饮为什么很难做到薄利多销?
- qutebrowser 只用键盘操作的浏览器
- b站上的计算机课程有哪些,B站课程排行榜,这届大学生最爱学什么?
- 族蚂网针对宠物网站建设有哪些新体验
- 还在加班?你应该把生命浪费在美好的事物上
- 破土Plan遇到的keng
- XtraReport绑定数据源的三种方式
- 网站添加百度分享工具的好处
- matlab直观数据处理,霍尔效应实验的MATLAB数据处理
- 【Alist + Teracloud】WebDAV免费畅游互联网个人方案总结,一些支持WebDAV的应用推荐
- 蓝桥杯java B组历年省赛真题汇总及题目详解
- docker: error pulling image configuration:timeout
热门文章
- CADENCE ORCAD原理图导出FPGA UCF的方法
- html 属性中嵌套php,如何在PHP中使用嵌套数组创建HTML数据属性字符串?
- 自动检测CSRF漏洞的工具
- html3d上下翻转4面效果,花式实现图片3D翻转效果
- c语言文学研究助手题目,各位达人,给小弟一个文学研究助手的c程序啊!急啊!谢谢大家啦!...
- 牛客练习赛44 B	小y的线段 (思维)
- 【bzoj1597】 土地购买
- 第二阶段 工作总结 05
- jQuery lazyload插件详解和问题解答
- Java 语法 索引 ----- 泛型(Generics)