位置: 编程技术 - 正文

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

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

  • 无形资产多摊销了怎么办
  • 电子承兑提示付款
  • 个体户生产经营个人所得税
  • 纳税申报现金流量表报错了可以重新申报吗
  • 小规模纳税人印花税减免税优惠政策
  • 买卖金融商品应交增值税计算
  • 外币折算会计处理例题
  • 委托贷款业务涉嫌诈骗吗
  • 实收资本印花税怎么申报税目
  • 贷款和应收款项在活跃市场中没有报价
  • 房屋租赁发票在哪开
  • 2021申请一般纳税人公司的条件
  • 个税申报系统中年收入不超6万元的确认错了怎么改
  • 网络综合布线开关在哪
  • 仲裁委判决还能上诉吗
  • 电厂采购通常采购什么
  • 不可抵扣的进项税额如何做账
  • 企业或公司的证明怎么弄
  • 增值税和消费税的异同点
  • 期权的行权收益
  • 增值税谁来付
  • win11无法打开英雄联盟
  • win10系统升级软件
  • 计算工业总产值指数
  • 喀拉拉邦地理位置
  • 苹果mac os 10.4
  • 一般纳税人取得普票会计分录
  • 代收的税金如何记账
  • 温尼伯湖成因
  • codelite教程
  • 自定义max函数
  • 退教育附加税会计分录
  • 基于骨骼关键点的动作识别
  • vscode常用插件功能简介
  • php进行批量任务分类
  • react redux reducer
  • 目标检测 2021
  • 盈余公积弥补以前亏损分录
  • 农业合作社需要交土地使用税吗
  • 收到的免税苗木发票必须当月抵扣么
  • 应收贷方表示啥
  • 连通函数
  • 哪些人需要进行个人所得税年度汇算
  • sql数据库聚集索引和非聚集索引的区别是什么?
  • 养猪死亡
  • 代扣款业务的处理方式
  • 超市小规模税负怎么算
  • mysql delete limit 使用方法详解
  • 专利年费可以计入研发费用加计扣除吗
  • 汇算清缴补交所得税的分录
  • 长期待摊费用科目怎么使用
  • 对公账户原路退回备注怎么写
  • 失业保险稳岗返还计入什么科目
  • 预缴税款的会计处理
  • 小企业如何建立党支部
  • 本年利润怎么结账
  • 残保金新企业用交吗
  • 私营公司预收账款怎么算
  • 工业企业应付会计工作内容
  • delete from 表名 where
  • 一条的句子怎么写
  • sqlserver模糊查询不用like
  • windows 2003 iis+php5+mysql+phpmyadmin 详细安装配置
  • Win10 Mobile 10572 预览版已修复和已知问题汇总
  • centos7启动卡在界面
  • win1020h2无法重启
  • win10更新中重启会怎么样
  • 如何永久激活win11
  • win7唤醒后屏幕黑屏
  • 有usb3.0驱动的win7
  • glht函数
  • android图片布局
  • 安卓游戏引擎
  • 数独算法代码c语言
  • Node.js中的什么模块是用于处理文件和目录的
  • 隐藏磁盘空间
  • shell输出1到100
  • 轻松搞定是什么短语
  • 已经开具的专用发票
  • 个人所得税中途换了公司 退税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设