位置: 编程技术 - 正文

opengl 4.X off-screen rendering

编辑:rootadmin

推荐整理分享opengl 4.X off-screen rendering,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

openGL可以渲染屏幕的framebuffer,自然可以渲染不直接显示的framebuffer,把数据存入非直接显示的framebuffer中以便后续的渲染需求,或者直接存入纹理贴图texture都是非常灵活的。 需要注意的是因为不同平台数据结构不同的关系,你需要针对不同平台,创建和设置针对的framebuffer格式。 比如如果你使用默认的framebuffer那么,他的大小就是窗口或屏幕的大小,而如果窗口移出屏幕范围,那么有可能对应的shader压根就不会运行了(由于裁剪测试clip test,顶点shader也极有可能把几何直接剔除,那么就进入不了后续的渲染管道)。所以用户需要提供自定义framebuffer,这样渲染到指定地点就是可控制的,但是最大的尺寸是被openGL所限制的。 用户提供的framebuffer被openGL作为framebuffer objects对待,顾名思义它和其他openGL中的objects一样需要被创建并初始化。 首先我们需要为framebuffer object预留一个名字

并把它绑定到设备上下文上去初始化。

opengl 4.X off-screen rendering

一般情况下 glBindFramebuffer()会把应用程序提供的framebuffer object作为当前framebuffer。其中参数framebuffer就是我们预留的名称之一(opengl都是靠GLuint来索引object的,为它的名称),target参数一般为GL_FRAMEBUFFER。当然同时绑定两个framebuffer对象,一个用于读取,一个用于写入可是可以的。只要把framebuffer对象绑定到GL_READ_FRAMEBUFFER缓冲即可。(作者插一句,一开始初学者可能不懂,为什么opengl要这样的方式,创建并绑定然后初始化任何gl对象,包括一般的顶点数组buffer,纹理buffer等,其实我们从它的调用顺序和逻辑就能看得出,glGen开头的或者glCreat开头的函数都是要你输入一个数组大小,和一个数组指针,传入的都是GLuint,说明在“创建”对象时,这个函数不过向openGL预留了一个对象的名称而已,比如openGL给了顶点buffer一个名称“1”,而给纹理buffer一个名称”2”,给第二个顶点buffer名称”3”,反正都是一个整数,那最少opengl也可以提供个对象吧?那么这些名称被预留以后并没有实际的内存储存数据,也不知以何种格式储存数据,所以需要glBind开头的函数来绑定,绑定到哪儿呢?openGL内置的缓冲区中,GL_FRAMEBUFFER,GL_ARRAY_BUFFER,GL_UNIFORM_BUFFER等,绑定之后这些对象“名称”就知道如何储存数据,然后初始化glBufferData()用以在这些超大的GL_XX_BUFFER缓冲区中分配一定的内存空间赋予这些对象”名称”,至此,我们就可以利用这些对象名称,通过缓冲绑定点存储数据,读取数据,修改数据了!整个流程是这样的:预留名称->绑定缓冲->从缓冲分配内存给名称->通过缓冲绑定点读写数据,需要注意的是我们还是要通过绑定缓冲读写数据比如glBufferData它接收的参数是GL_BUFFER,而不是名称对象,这很好的分离了数据与功能,当名称对象1绑定到GL_BUFFER中,通过GL_BUFFER修改1索引区中的数据,然后再绑定其他名称对象2到GL_BUFFER中通过GL_BUFFER修改2索引区中的数据,”名称对象”只负责索引存储数据在缓冲的位置和数据的格式,而缓冲区负责管理存放数据的内存和具体读写功能,分离了数据与方法类似于mvc ,缓冲区为controller,名称对象类似于model)。 如果只写则设置target为GL_DRAW_FRAMEBUFFER. 写对象的绑定会将一切渲染都指定到其目标当中(包括剪裁,模板,深度测试,和最终的颜色模板混合等)。只读framebuffer则是数据源没啥好说的。如果target设置成GL_FRAMEBUFFER则,这块framebuffer是既可读,又可写的,通常我们需要这样的对象。

创建完framebuffer我们就可以把纹理贴图数据贴上去(纹理贴图有自己的组成格式,而framebuffer就是像素格式,最适合设备输出),当然你也可以只贴上去纹理贴图的深度,模板或颜色之一,这样的话framebuffer就成为一个深度,模板或者颜色缓冲了!使用函数glFramebufferTexture()函数去吧纹理贴入framebuffer中,原型为

其中target是framebuffer对象的缓冲区捆绑点,可以是GL_READ_FRAMEBUFFER,GL_DRAW_FRAMEBUFFER,或者GL_FRAMEBUFFER。 attachment参数告诉openGL哪些数据是你想贴入buffer的有GL_DEPTH_ATTACHMENT,GL_STENCIL_ATTACHMENT,也可以2个数据一起GL_DEPTH_STENCIL_ATTACHMENT. 想让framebuffer变成颜色buffer的话,GL_COLOR_ATTACHMENT,事实上你可以同时存入多个颜色贴图,GL_COLOR_ATTACHMENT1,GL_COLOR_ATTACHMENT2….. 首先我们看下如何把贴图贴到framebuffer中并渲染出来,(注:这不是标准使用贴图的方法,我们还是应该通过sampler2D等标准贴图绑定模型技术来渲染物体,这个framebuffer只是在特定的情况下的需求,比如截图等),参数texture就是你想要贴入framebuffer的贴图,参数level则是mipmap level,多重纹理使用,如果没有多重纹理即0。 下面代码显示了如何设置深度framebuffer并使用另一张贴图渲染的示例。

版权声明:本文为博主原创文章,未经博主允许不得转载。

GLSL 卡通shader 浏览Geeks3D,发现一个好玩儿的shader,改了个gles版本,用cocos2dx在iphone上跑了一下,效果如图:原文shader是gl版,在手机上跑的很慢,iphone5全屏处理情况

Android OpenGL ES(五)----进入三维正交投影和透视投影推导 在3D图形程序的基本矩阵变换中,投影矩阵是其中比较复杂的。平移和缩放浏览一下就能理解,旋转矩阵只要掌握了三角函数知识也可以理解,但投影矩

OpenGL纹理贴图 JPEG纹理 1.1JPEG纹理大型的应用程序特别是游戏程序使用的贴图非常多,如QuakeIII使用的JPEG和TGA文件就有将近个,其中JPEG文件超过一半,占用近MB。如果都使

标签: opengl 4.X off-screen rendering

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

上一篇:opengl 绘制绕远点转的飞机(opengl画曲线)

下一篇:Android OpenGL ES(五)----进入三维正交投影和透视投影推导

  • 递延收益所得税负债
  • 支付利息现金流量表中什么增加
  • 进口货物如何确认
  • 调整应付账款折扣到营业外收入吗
  • 印花税减半征收优惠政策2022
  • 合法的扣税凭证图片
  • 土地出让金评估费怎么算
  • 销售发票红冲会计分录怎么做?
  • 提取资本公积会计凭证
  • 银行卡季度结息
  • 跨年度销售费用如何调账
  • 税控盘全额抵减申报
  • 收到投资者购买股票的资金
  • 项目现金流量的构成
  • 设备安装税率是6%还是9%
  • 文化事业建设费征收对象
  • 金税盘抵扣增值税申报
  • 外币报表未分配利润折算
  • 作废章盖在哪个位置
  • 境内个人去境外开设公司
  • 报增值税怎么取消校验
  • 固定资产抵扣进项
  • 平均应收账款金额
  • 旅行社差额征税如何开票
  • 企业一年零申报怎么办
  • 账面上挂的其他应付款怎么冲平?
  • 出口退税转内销还是转免税好
  • 佳能2900打印机加碳粉教程
  • 如何解决无线网络连接问题
  • 工会资助贫困大学生
  • 接入设备检测
  • window10下载cad2014
  • linux系统中如何查看日志
  • 上市公司发行股票是好还是坏
  • 公司装修款怎么做分录
  • win11系统怎么设置密码锁屏
  • php运行无法访问此页面
  • nlp工具箱
  • 销售方红字发票的账务处理?
  • 应收账款在贷方如何平账
  • 周志华《机器学习》第三章课后习题
  • 折扣店商场
  • sqlsever无法连接到服务器
  • 会计科目备抵科目都有哪些
  • 企业应纳税总额怎么算
  • 个人所得税减免项目有哪些
  • PostgreSQL教程(六):函数和操作符详解(2)
  • mysql语句性能优化
  • 隔月发票退回是怎么回事
  • 原始凭证的基本内容有会计分录吗
  • 申报抵扣
  • 发工资时多打给员工的钱
  • 增值税期末留抵退税什么意思
  • 销售退回的账务处理红字
  • 车船使用税应该怎么交
  • 永续债利息可以抵税吗
  • 银企对账操作流程
  • 发票丢失记账联入账
  • 上市公司做会计有什么好处
  • 纳税筹划有哪些特点以及原则?
  • 工业企业固定资产折旧年限
  • mysql重置初始密码
  • win7系统的笔记本电脑有哪些
  • 开机f8显示英文字母
  • win10一直显示正在配置更新
  • 简洁桌面怎么设置
  • cocos预加载
  • 微信小程序倒计时乱跳
  • 查看网关的mac地址是多少
  • python网络爬虫程序
  • jquery22插件网
  • 宁波国税局领导名单
  • 青岛市地方税务局网上办税厅
  • 怎么撤销税务三方协议
  • 税务局残保金征收工作汇报
  • 求资金占用利息的公式
  • 融资租赁出租会计账务处理流程
  • 什么是审计的重要特征,也是审计的精髓
  • 国家税务总局河南税务局官网查询
  • 联通前面加什么可以隐藏号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设