位置: 编程技术 - 正文

【Cocos2d-x】截屏实现的两种方法RenderTexture和glReadPixel,实现和原理详细分析(cocos2dx视频教程)

编辑:rootadmin

推荐整理分享【Cocos2d-x】截屏实现的两种方法RenderTexture和glReadPixel,实现和原理详细分析(cocos2dx视频教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2dx schedule,cocos2dx schedule,cocos 截图,cocos2d schedule,cocos 截图,cocos 截图,cocos2d schedule,cocos creator图片裁剪,内容如对您有帮助,希望把文章链接给更多的朋友!

很多游戏都有截屏的需求,比如截屏后与好友分享截图,或者为了减少渲染内容,在打开某个UI界面时隐藏后面的所有渲染,用截屏代替。

截屏是一个比较老的话题了,一般用RenderTexture可以解决,其实我再拿出来说是因为想讨论另一种方法:glReadPixels。

以下分析两种截屏方法:

1. RenderTexture

2. glReadPixels

1. RenderTexture

实现代码如下:(测试用的是Cocos2d-x 3.3)

调用代码如下:

原理:把当前场景进行一次渲染,但这次渲染不是渲染到屏幕上,而是渲染到RenderTexture维护的一张纹理上,然后再用这张纹理生成Sprite。【Cocos2d-x】截屏实现的两种方法RenderTexture和glReadPixel,实现和原理详细分析(cocos2dx视频教程)

注意那句setFlippedY(2.x版本叫做setFlipY),因为OpenGL的纹理数据是从下到上保存的,但渲染却是从上到下渲染的,所以生成的纹理是上下颠倒的,需要翻转一下。

2. glReadPixels

之前我一直都是用上面那种方法进行截图的实现,后来看了一些OpenGL的书,认识一个函数glReadPixels,这个函数可以直接读取帧缓冲区的像素数据。

实现代码如下:

原理:直接读取帧缓冲区的像素数据,把读取出来的数据生成一张纹理,再用纹理生成Sprite。

注意:同样需要setFlippedY,原因同上。另外一点,由于用这种方式生成出来的texture的宽高为屏幕的实际宽高(而不是setDesginResolutionSize的宽高),所以需要setScaleX,setScaleY转换为design的宽高。

效率比较:RenderTexture需要把整个场景渲染一次(就是说要把以CCScene为根节点的节点树进行一次遍历,访问每个节点的visit和draw函数),而glReadPixels是直接获取显卡的数据,效率应该要比前者快。

对了还有一个问题,无论是RenderTexture还是glReadPixels的方法,如果把截图叠在场景上,会发现有那么一点点的偏差,这是为什么呢?其实这是由于透视投影中近大远小的原因,图片的四周离摄像机较远,投影之后会比中间小,所以生成出来的图片并不是原图片。在Cocos2d-x中,Director::setProjection默认设成了透视投影,如果是2D游戏,只需调用一下

这句会把投影方式设成正交投影,即可解决问题。

由于本人水平有限,文章叙述如有不当,欢迎吐槽。

透视投影详解 来源:cnblogs作者:zdd概述投影变换完成的是如何将三维模型显示到二维视口上,这是一个三维到二维的过程。你可以将投影变换看作是调整照相机的焦

openGL ES 文章主要是对opengl的一些重要的知识点进行总结:1、opengl的工作原理通常采用图形卡驱动程序的形式:管线(pipeline)是一个过程,可能涉及两个或多个独

OpenGL es2.0 加载纹理图片和CubMap publicstaticintinitTexture(intdrawableId,Resourcesresources){int[]textures=newint[1];GLES.glGenTextures(1,textures,0);inttextureId=textures[0];GLES.glBindTexture(GLES.GL_TEXTURE_2D,textureId);GL

标签: cocos2dx视频教程

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

上一篇:OpenGL--抗锯齿(opengles 抗锯齿)

下一篇:透视投影详解(透视投影的作用)

  • 小规模纳税人销售自建不动产
  • 个人所得税计提分录怎么写
  • 进项发票已认证,发现发票有问题怎么办
  • 收到失业金返还什么意思
  • 交强险怎么查
  • 价税分离合同印花税的计税依据怎么算
  • 银行日记账的登记实例图
  • 行政事业单位预算管理制度
  • 简易征收的老项目是指什么时候
  • 超市购物卡购物刷卡显帐号吗
  • 支付员工费用报销账务处理
  • 季度不超过9万
  • 纳税人在什么情况下可以延期申报
  • 土地不动产登记证办理流程
  • 外贸企业采购货物会计分录
  • 企业中由特定人员所承担的一项
  • 酒类消费税征收环节归纳
  • 会计学堂值得购买吗
  • 收到的会费计入什么会计科目
  • 资金印花税
  • 对公回单必须在银行开吗
  • 企业转让销售配额怎么算
  • 非正常损失进项税额转出计算
  • win10如何设置一键还原系统
  • 穿越火线封号查询官网
  • 企业购入一批材料卖价5万元
  • 微软输入法卸载不了
  • 户外广告位怎么收费
  • 公司代扣税
  • 纳税人销售免税货物
  • 工程扣款 甲方账务处理
  • BEV(Bird’s-eye-view)三部曲之二:方法详解
  • web应用程序的主要组成部分
  • 手把手教你win7换主板不重装系统的方法
  • 对方开了红字信息表我们开发票怎么做账
  • 登录界面html5
  • 股本金退出要交税吗?
  • nacos注册流程
  • 外埠施工企业
  • python Timer定时器如何使用?
  • 小规模纳税人如何申报增值税
  • 年终奖可以不计入社保基数吗
  • 所得税调增调减技巧
  • 企业稳岗补贴计算公式
  • 收到国外客户的货款怎么做账
  • 五险一金没有金
  • 暂估成本的账务怎么处理
  • 上月暂估成本次月用冲回吗
  • 打样费入什么科目
  • 暂估有几种处理方法
  • 收到财付通的短信通知
  • 如何进行汇算清缴
  • 企业接受供应单位提供劳务而发生的应付账款
  • 水果销售公司怎么起名字好听
  • 企业之间土地交易
  • 物流行业货币资金占比
  • 会计基础知识归纳大全
  • sqlserver模糊查询不用like
  • Vista下WMC不能播放RMVB解决办法
  • win1909版本
  • 手把手教你安装实木门
  • 电脑开机时进入安全模式怎么退出
  • 注册表怎么优化
  • windows7与xp共享文件夹
  • mac截图快捷键设置
  • ubuntu源代码
  • win8无法关机一直转圈
  • linux常用命令 cat
  • win8.1 无法连接到此网络
  • win10更新系统遇到错误
  • windows8.1的图片
  • 网页设计需要多少分辨率
  • python算法具有哪五个性质
  • JQuery.validationEngine表单验证插件(推荐)
  • easyui控件
  • 电脑完美平台
  • python各种函数
  • python数学题
  • 免税证明怎么开?(国税局已回复)
  • 增值税电子普通发票需要盖章吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设