位置: 编程技术 - 正文

OpenGL学习日记-2015.3.13——多实例渲染(opengl入门教程(精))

编辑:rootadmin
实例化(instancing)或者多实例渲染(instancd rendering)是一种连续执行多条相同渲染命令的方法。并且每个命令的所产生的渲染结果都会有轻微的差异。是一种非常有效的,实用少量api调用来渲染大量几何体的方法。OpenGL提供多种机制,允许着色器对不同渲染实例赋予不同的顶点属性。几个简单的多实例渲染命令: 1、void glDrawArraysInstanced( GLenum mode, GLint first, GLsizei count, GLsizei primCount ) 该函数是glDrawArrays()的多实例版本,参数完全等价,只是多了个primCount,该参数用于设置渲染实例个数。 2、void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, void* indices, GLsizei primcount ) 该函数是glDrawElements()的多实例版本,同样只是多了个primCount参数而已,同样是用于设置渲染实例个数。 3、void glDrawElementsInstancedBaseVertex( GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instanceCount, GLuint baseVertex ) 该函数是glDrawElementsBaseVertex()的多实例版本,instanceCount表示渲染的实例数目。多实例渲染顶点属性控制: 1、void glVertexAttribDivisor( GLenum index, GLuint divisor ) index对应于着色器中输入变量的location。divisor:表示顶点属性的更新频率,每隔多少个实例将重新设置实例的该属性,例如设置为1,那么每个实例的属性都不一样,设置为2则每两个实例相同,3则每三个实例改变属性。而该属性的属性数组大小将为(instance/divisor),instance为之前设置的渲染实例数(primCount),假设在多实例渲染中改变实例的颜色,设divisor为2,instance为,颜色数组至少为/2 = 组rgba数据,才能保证每个实例都有自己的颜色&#;,不然将是黑漆漆的。最后如果divisor设置为0,将代表是非实例化,渲染的结果是,所有实例都是黑漆漆的,可能这个黑漆漆的结果也不是必然的,我猜想的是这时候着色器的输入变量vec4 color为默认的(0.0,0.0,0.0,1.0)并没有设置它的&#;,所以是黑色的。顶点着色器分析:#version //输入变量position,顶点坐标 layout (location = 0) in vec4 position;//normal顶点法线计算 layout (location = 1) in vec3 normal;//顶点颜色 layout (location = 2) in vec4 color;//特别注意,这里设置的mat4类型的输入变量,location为3,但是一个mat4类型会占据连续的4个位置//因此model_matrix占据了3,4,5,6四个索引位置。 layout (location = 3) in mat4 model_matrix; //在程序渲染过程是常量的视图矩阵,和投影矩阵(just这个程序是常量) uniform mat4 view_matrix; uniform mat4 projection_matrix; //输入变量,一个简单的结构体,法线,和颜色。 out VERTEX { vec3 normal; vec4 color; } vertex; void main(void) { //计算模型视图矩阵 mat4 model_view_matrix = view_matrix * model_matrix; //计算顶点坐标 gl_Position = projection_matrix * (model_view_matrix * position); //计算法线和颜色,并输出 vertex.normal = mat3(model_view_matrix) * normal; vertex.color = color; }片元着色器分析:#version //片元着色器的输出 layout (location = 0) out vec4 color;//和顶点着色器几乎一样的片元着色器输入,in/out必须是匹配的。 in VERTEX { vec3 normal; vec4 color; } vertex; void main(void) { //结合法线计算最终的颜色 color = vertex.color * (0.1 &#; abs(vertex.normal.z)) &#; vec4(0.8, 0.9, 0.7, 1.0) * pow(abs(vertex.normal.z), .0); }应用程序代码:代码并没有太多的分析,主要是用了前面几个函数,进行多实例渲染的设置,代码在关键的地方都有或多或少的注释。在这里把尽可能把代码贴全。代码中用到了vbm&#;式的模型数据,大概是书者自己定义的一种&#;式,在源代码中vbm管理类历经变迁,新版本还不能读旧版本的数据。在这里顺便提供第八版源代码的下载地址: 应该可以轻易下到。感谢作者们的辛勤劳动另一个多实例渲染实例,纹理打包,着色器内置变量gl_InstanceID使用:实例计数器gl_InstanceID:当前实例的索引&#;可以再顶点着色器中通过内置变量gl_InstanceID变量获得。该变量被声明为一个整数,初始为0,每个实例被渲染之后,他会加1.他总是存在于顶点着色器中,即使当前没有启用多实例特性,此时他的&#;保持0.gl_InstanceID可以作为uniform数组的索引使用,也可以作为纹理查找的参数,或者作为某个分析函数的输入,等等。新实例分析:新示例实现了上一个实例的相同画面,只是程序的实现方式不一样。在这里用到了纹理缓存对象,对于我又是一个未使用过的特性,在接受新东西的时候总不会觉得乏味。...................虽然不觉得乏味,但还是会困,明天还得上班QAQ,To Be Continue~~~~~

推荐整理分享OpenGL学习日记-2015.3.13——多实例渲染(opengl入门教程(精)),希望有所帮助,仅作参考,欢迎阅读内容。

OpenGL学习日记-2015.3.13——多实例渲染(opengl入门教程(精))

文章相关热门搜索词:opengl使用教程,opengl入门教程(精),opengl learn,opengl入门视频教程,opengl入门视频教程,opengl入门视频教程,opengl入门视频教程,opengl教程48讲,内容如对您有帮助,希望把文章链接给更多的朋友!

OpenGL学习笔记之配置OpenGL OpenGL是计算机图形学领域的一门入门语言,OpenGL开发库的一些文件在官网上可以下载到。里面包含三个文件,如下:1.把在OpenGL开发库中LIB(库文件)glu

OpenGL学习-3-键盘事件注册以及投影矩阵变换练习代码 #includestdio.h#includewindows.h#includeglut.h#includeglaux.hvoidinit(void);voidCALLBACKreshape(GLsizeiw,GLsizeih);voidCALLBACKOn0KeyDown(void);voidCALLBACKOn1KeyDown(void);voidCALLBACKOnLButtonDown(A

在CodeBlocks中使用openGL (原文找不到了,只有某个转载该篇文章的博客链接:

标签: opengl入门教程(精)

本文链接地址:https://www.jiuchutong.com/biancheng/373092.html 转载请保留说明!

上一篇:webgl学习笔记:webgl的原理及介绍(1)(webgl基础教程)

下一篇:OpenGL学习笔记之配置OpenGL(opengl入门教程)

  • 二手房买卖避税违法吗
  • 税务局开专票作废重开流程
  • 消费税应该怎么缴纳
  • 账簿印花税的计税方法
  • 通行费发票勾选认证有多少就可以抵扣多少吗
  • 发票右上角数字是什么
  • 工商年报填好后怎样公示
  • 取得增值税专用发票要算税吗
  • 即期外汇交易有幅度限制吗
  • 以前月度费用当期怎么入账合适?
  • 溢价发行股票的账务处理
  • 企业安装监控费用怎么做账
  • 营改增之后账务怎么处理
  • 上个月开的增值税发票这个月可以作废吗
  • 早教加盟需要
  • 高新技术企业资助
  • 当月进项已认证,发现票有问题怎么处理
  • 贷款减值损失的计提规则
  • 记账凭证领用材料如何填写
  • 挂靠行为应当如何纳税?
  • 跨年度多计提的印花税怎么冲回
  • 增值税专用发票有效期是多长时间
  • 视同销售财税处理怎么做?
  • 收到专票有误,已跨月未认证,销售方不红冲咋办
  • 五险一金的记账凭证怎么填写
  • 苹果电脑任务栏跑到左边去了
  • 查找我的mac怎么打开
  • 企业对外捐赠的税法处理
  • 长期股权投资权益法四个明细科目
  • 国外交工作的基本出发点和落脚点是
  • PHP:xml_set_processing_instruction_handler()的用法_XML解析器函数
  • 计提长期待摊费用会计分录怎么写
  • php日期时间运算汇总
  • 图解在OS X中管理窗口大小的多种方法
  • unity导出webgl报错
  • 建筑企业总包方都有哪些印花税
  • 可变现净值属于资产计量属性吗
  • 机动车发票金额含税吗
  • 期末应交增值税转入未交增值税
  • framework开发教程
  • 编译和链接的区别是什么
  • 杀疯了出自哪里
  • php正则匹配网址
  • 浅谈建筑地基基础加固施工技术亲
  • 我们现在收到的礼物
  • 个人所得税专项附加扣除赡养老人
  • 运输发票怎么做账
  • 固定资产报废处置的请示
  • 公司财务报表中不设其他综合收益项目可以吗
  • 什么是叫资产负债表项目
  • 暂估和冲暂估分录
  • 补缴纳税款
  • 收到的进项发票在哪里认证
  • 租赁设备如何做会计分录
  • 出口运保费是什么费用
  • 个人独资企业与一人公司的区别与联系
  • 一般纳税人的进项税额可以抵扣吗
  • 用友为什么引入不了账套
  • 外汇申报要在几天之内
  • 进项发票超过期限不认证怎么办
  • 空气检测费计入什么科目
  • 应收应付可以相互冲销吗
  • 如何使用ssh
  • win10系统环境设置
  • freebsd操作命令
  • windows7桌面小工具下载
  • js创建对象的方法有哪些
  • node-js
  • node一次执行多个文件
  • javascript基础笔记
  • javascript的核心组成部分
  • django批量上传图片
  • 国家 税务 总局
  • 惠州市国家税务局张新华简历
  • 专票怎么查询已开记录
  • 贵州地方税务局网上办税服务厅
  • 娱乐圈的收入高得离谱
  • 百望税控盘怎么导出清单明细
  • 年度营业账簿印章怎么写
  • 公司迁税务所流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设