位置: 编程技术 - 正文

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

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

  • 税控盘开票软件访问数据库错误
  • 劳务报酬支出 怎么做账
  • 刷卡收手续费吗
  • 应纳税所得额超过36000至144000
  • 即将发生坏事的预兆
  • 长期股权投资会计处理方法,对投资方报表有何影响
  • 冲销暂估材料怎么做账
  • 利润是负数如何计算利润率
  • 增值税系统技术维护费记什么科目
  • 公司外来人员进入公司
  • 按公允价值计量是什么意思
  • 关于销售返利的说法正确的有
  • 汇算清缴所得税退回做账
  • 携税宝报税操作流程
  • 员工个人学历教育费用不能在企业所得税前列支
  • 企业所得税一般是几个点
  • 税务公司属于什么性质
  • 罚没收入要交税吗
  • 组织员工出游注意事项
  • w11系统激活码
  • win8电脑一键还原怎么操作
  • 农民合作社扶持政策
  • 支付中间业务收入怎么算
  • 如何查看电脑是什么牌子
  • php红包源码
  • 公司有长期挂账的权利吗
  • 怀特岛郡国旗
  • 企业租赁房屋怎么开发票
  • 住房房产税如何征收
  • 计提未支付的费用
  • 在白雪覆盖的地方 什么歌
  • 头歌java入门运算符和表达式答案
  • php中文出现乱码
  • 涅迪克角灯塔上的节日彩灯,缅因州 (© Walter Bibikow/Alamy)
  • vue前端怎么运行
  • 资产负债表应收账款怎么计算
  • 升级nodejs到最新版本
  • 盘点那些神级翻唱现场
  • window cuda
  • wget下载yum
  • 公司名下商品房过户给公司需要交过户费
  • 跨年度退回的公共预算支出
  • 债权投资产生的暂时性差异确认所得税吗
  • 哪些情况可以免征个人所得税
  • 企业附加税的税率
  • 出口企业免税要交什么税
  • 往来账款应该怎么记账
  • 出口退税率为0的账务处理
  • 融资性售后回租承租方出售资产为什么不缴纳增值税
  • 取得下列资产时应按公允价值计量
  • 所得税纳税调增会计需要做业务处理吗
  • 免征的增值税账务处理
  • 投资收益的主要来源有
  • 物流公司挂靠车辆如何做账?
  • sql server设置
  • sql server连接不上服务器怎么办
  • solaris开放指定端口
  • 开机蓝屏怎么回事
  • Linux环境下MySQL服务器优化的方法详解
  • FNPLicensingService.exe是什么意思
  • winadm.exe - winadm是什么进程
  • dvdrom是什么
  • linux的总结
  • win8系统怎么取消屏保
  • win7 esd安装文件怎么安装教程
  • Win8.164位/32位KB3096053补丁下载 主要修复KB3069114安装问题
  • centos 安装chia
  • linux如何创建ftp
  • 在linux系统中查看文件的内容命令
  • cocos2dx4.0教程
  • windows更新
  • require jquery
  • python中面向对象的概念
  • angularjs常用总结
  • jQuery Ajax Post 回调函数不执行问题的解决方法
  • 一个超简单的纸飞机
  • 广东地税发票查询系统
  • 保险公司代收2.8万
  • 广西壮族自治区图书馆
  • 2.4车船使用税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设