位置: 编程技术 - 正文

【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 抗锯齿)

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

  • 税控盘白盘和黑盘一样吗
  • 记账凭证如何填写明细科目
  • 鉴证服务的税率有哪些
  • 小微企业季报
  • 小型企业利润表
  • 2019小规模纳税人免征增值税政策
  • 一般纳税人需要申报什么税
  • 简易计税和一般计税的区别
  • 现金形式发放的福利需要扣税吗
  • 低值易耗品费用包括哪些
  • 保险金扣税吗
  • 公司开办期间的费用如何处理
  • 行政单位维修工程规定
  • 报关单有多个合同协议号
  • 金税盘清卡晚了一天会怎么样
  • 总分公司、母子公司:三流不一致情况下,如何抵扣增值税?
  • 销售不动产增值税税率变化
  • 小规模收到增值税专用发票咋处理
  • 暂停水电
  • 记账凭证保存年限2019
  • 在途物资非合理损耗
  • 暂估运费成本的账务处理
  • 个人所得税人员添加后如何操作
  • 试用期内进一步使用
  • 计算机系统结构第三版课后答案
  • 跨境电商小规模与一般纳税人
  • mac系统屏幕
  • ajax无刷新技术
  • ezulumain.exe是病毒进程吗 ezulumain进程安全吗
  • win10右键菜单管理在哪打开
  • 橡皮树的养殖方法视频教程
  • php表单的作用是什么
  • 公司需要购买物品
  • 税收滞纳金可以抵税吗
  • vue获取value值
  • 利润的调增和调减
  • 生产企业支付的车间劳务外包费入账科目
  • 视同销售收入税法处理?
  • 医疗保险合同印花税怎么交
  • 企业应采用
  • 接受捐赠收入如何纳税
  • 新设立的企业如何办理开业税务登记
  • 合并报表为什么要抵消子公司所有者权益
  • 税务稽查补税
  • 回购股票并注销影响所有者权益吗
  • 债转股需要哪些资料
  • 公司注销税款太多
  • 用支票偿还货款
  • 缴纳文化事业建设费
  • 企业发生的汇兑差额
  • 股票股利怎么理解
  • 折旧汇总分配周期参数设定完成可以更改吗
  • 宣告分配现金股利和股票股利的区别
  • mysql乱码问题怎么解决
  • 建筑行业普票和专票的税率一样吗
  • 增值税专用发票电子版
  • 营改增后转让土地使用权怎么交增值税
  • 应付职工薪酬账户贷方登记的是
  • 如何进行汇算清缴
  • 企业软件开发哪家好
  • 公司与公司之间劳务协议
  • 固定资产清理的税率是多少
  • 现金日记账的登记证据有
  • SQL中实现SPLIT函数几种方法总结(必看篇)
  • centos7.0网络配置
  • windows10自带磁盘修复工具
  • ubuntu zed
  • win8.1连接wifi
  • mac safari浏览历史
  • win10开机6秒
  • 如何配置sendmail
  • win10系统打开cad出现致命错误
  • 批处理修改文件名称
  • 老生常谈的近义词
  • Javascript字符串奇数位替换
  • 瀑布流水风景图片
  • 国家税务总局司长
  • 处级工作调动用什么手续
  • 税收制度的核心是税法
  • 汉口市中心
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设