位置: 编程技术 - 正文

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

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

  • 湖南个税申报系统app
  • 企业如何进行纳税申报
  • 税务师考试考几门几年考完
  • 税控盘解锁是什么意思
  • 没发票的费用怎么做账
  • 融资租入的办公楼属于固定资产吗
  • 冲销暂估入库
  • 收取境外服务费收入会计分录
  • 申报专项资金项目是什么
  • 园林绿化公司前景如何
  • 免税发票可以入账吗
  • 一般纳税人的兼职合法吗
  • 生产经营活动包括建设项目吗
  • 原始凭证谁负责
  • 未开发票申报
  • 4s店开业有什么优惠
  • 销售返利是冲减收入还是做销售费用
  • 增值税一般纳税人与小规模纳税人的区别
  • xp系统鼠标右键不能用怎么办
  • 联想随身充评测
  • 失业稳岗补贴要交社保吗
  • 行政单位跨年度收到发票,补付尾款会计分录
  • PHP:session_status()的用法_Session函数
  • 新准则规定
  • 重楼的功效与作用价格
  • 电脑桌面调出键盘
  • .ico是什么文件
  • PHP:shell_exec()的用法_命令行函数
  • 设备销售合作协议书范本
  • php接口开发详解
  • 残保金计税基数是什么
  • php 错误提示
  • 业务预算包括直销费用吗
  • 发票临时增量好难
  • 年末未分配利润减去年初未分配利润等于什么
  • 企业会计准则无形资产土地摊销
  • 企业之间支付的管理费指什么
  • 增值税发票认证勾选平台
  • 年底了,你们公司年会干点啥都?
  • 营业外支出的会计要素
  • 取得交易性金融资产支付的相关税费计入
  • 临时工工资计入什么费用
  • 管理费用现金流量附表指定
  • 供应商奖惩制度具体办法
  • 企业为何
  • 医院床单被套尺寸
  • 对公提现是什么意思啊
  • 递延所得税资产账务处理
  • 什么叫社保差额调整
  • 国内的windows是正版吗
  • 在基于Xen的CentOS系统VPS上配置PPTP VPN的教程
  • u盘安装centos7安装详细图解
  • 超级本可以玩游戏吗
  • win8关机后自动重启怎么办
  • freebsd安装pkg
  • linux网络编程宋敬彬pdf
  • windows7中个性化设置
  • mac系统快速入门
  • win10系统中怎么打开IE浏览器
  • win10预览版bug
  • win7如何打开浏览器
  • 天气8.2.0.308版本
  • win8鼠标速度怎么调
  • 修改win10登录界面
  • 微软认为
  • python-flask
  • 浅谈幼儿良好行为的培养论文
  • javascript中函数
  • androidcontext传值
  • centos6.5设置网络
  • jquery命名空间
  • javascript编写程序
  • 深度定制Python的Flask框架开发环境的一些技巧总结
  • 为何会税控盘时钟异常
  • 重庆九龙坡区商务委员会
  • 一般纳税人注销公司需要查账吗
  • 职称评定专业一览表
  • 社保信息怎么补全
  • 四川地方税务局官网首页
  • 2022年广州社保基数
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设