位置: 编程技术 - 正文

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

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

  • 小规模忘了报税怎么办
  • 应交税费转结哪里去
  • 发给员工的福利费可以全部税前抵扣吗
  • 预提工资计入哪个科目
  • 账户利息怎么做账务处理
  • 当月增值税为负数
  • 企业出资怎么填写
  • 出口免税需要什么资料
  • 计提社保费计入什么科目
  • 发票丢了企业所得怎么办
  • 展厅出租或招商
  • 房地产企业交房时如何开票
  • 购进机器进项税额怎么核算?
  • 独立核算分公司可以享受小型微利企业优惠吗
  • 汇票和本票之间在使用上有什么差别
  • 交付使用资产科目核算
  • 长租押金多少合适
  • 本月合计怎么做
  • 先开票还是先预约
  • 王者荣耀电脑版叫啥名字
  • php怎么连接服务器
  • 不动产在建工程领用原材料的分录
  • 公司试乘试驾车卖掉在增值税哪个模块里开具
  • 补缴断交的医保划算吗
  • php set_time_limit
  • wordpress主题dux
  • php升级到php7注意的问题
  • 福利费做账分录
  • 跨年调整收入增值税怎么办
  • 时序21-21-21-47
  • 开源项目网站
  • 公链dapp
  • php微信公众号获取带参二维码
  • mongodb用法
  • 企业所得税营业收入包括什么
  • 对公账户怎么打印
  • 在售楼部帮客户卖房犯法吗
  • 计提事业发展基金分录
  • 贴现业务受理该怎么做
  • 房地产企业的固定资产比率越高越好吗
  • 现代服务行业有哪些
  • 资金占用费的税费是多少
  • sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW_NUMBER()两种情况性能分析)
  • 劳务报酬所得税可以退税吗
  • 小规模纳税人有哪些
  • 小规模未达起征点销售额是多少
  • 企业哪些收入不需要交税
  • 冲销暂估入库摘要怎么写
  • 财务费用为什么是向债权人支付的现金流量
  • 不动产拆除的收入处理
  • 研发费用的核算方法
  • 复利现值和复利终值互为逆运算对吗
  • 长期借款的账务处理会计分录
  • 外资企业的含义
  • 虚增利润怎么调整
  • 净利润增长率计算方式
  • 扶贫入股分红政策
  • 设置资产处置损益的依据
  • innodb数据和索引文件
  • cndll.dll
  • linux操作系统百度百科
  • freebsd 配置ip
  • 服务器时间和电脑时间
  • win10开始菜单怎么居中
  • 苹果电脑旋转屏幕设置在哪里找
  • 服务win10
  • win7打开文件夹都是独立的窗口
  • win7屏幕颜色变了怎么恢复
  • win8怎么添加wifi
  • linux系统fedora
  • 如何删除win8系统
  • vs2012配置opencv4.8
  • js组件是什么
  • matlab中sort函数的作用
  • angularjs删除数组元素
  • nodejss
  • shell脚本 \r
  • dom基础知识
  • js如何实现类的继承
  • jQuery Ajax 上传文件处理方式介绍(推荐)
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设