位置: 编程技术 - 正文

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

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

  • 审计合同需要交税吗
  • 耕地占用税是什么税种
  • 关税税收优惠记忆口诀
  • 发票隔月作废怎么操作
  • 城镇土地使用税纳税义务发生时间
  • 小型微利企业季度申报
  • 股份支付为什么计入股本溢价
  • 员工本地住宿费会计分录
  • 出口货物补税申报表
  • 购进出口商品的会计分录
  • 研发过程中材料费计入
  • 建筑施工企业销售费用包括哪些
  • 发票冲销后还能用吗
  • 报废资产处置收入怎么计税
  • 外购的半成品属于原材料吗
  • 自产产品赠送确认收入吗
  • 城建税当月缴纳要计提吗
  • 一台电脑上能装多个金税盘吗?
  • 审计费用收取标准的2020
  • 年中建账损益类科目怎么录
  • 征信证明怎么开啊
  • 冲失业保险分录怎么做
  • 资源税的征税对象和纳税环节
  • 工程咨询费用取费标准
  • 劳务费没发票怎样下账
  • 车辆违章罚款可以报销吗
  • 工会经费用途规定
  • 外购产品会计分录
  • mp3格式最高音质
  • Win11 Build 25336 预览版发布:Snap 窗口新增最近 20 个标签选项
  • sudo权限是什么意思
  • 洗浴报销票子怎么写
  • java委托模式和代理模式
  • mysql数据库常用sql语句
  • mongodb 聚合
  • 什么叫利得
  • 金税盘锁死日期哪里看
  • 恢复mysql数据库
  • mysql视图菜鸟教程
  • 通信服务费账务处理流程
  • 拆迁补偿如何进行
  • 外汇收入需要缴纳增值税吗
  • 如何计算债券实际收益
  • 支付永续债利息的会计处理
  • 生产成本与工程施工
  • 待认证进项发票哪里导出来数据
  • 挂靠企业电费如何处理?
  • 公司给非职工人员发工资
  • sql server使用的是什么逻辑模型
  • wind怎么申请
  • 开机无法进入桌面,无法调用资源管理器
  • bios1962错误
  • windows优化软件
  • centos安装选择哪个
  • windows个性化设置在哪里
  • macos安装pip
  • linux查看可执行命令
  • SsAAD.exe - SsAAD是什么进程
  • 教大家一些实用的技巧方法
  • linux CentOS/redhat 6.5 LVM分区使用详解
  • 淘宝下载电脑
  • Linux基本命令使用
  • win7系统搜索功能没了
  • js运算符种类
  • 拥有一个属于自己的空间高中作文
  • 编写批处理运行程序
  • vue music
  • shell中使用变量
  • csgo视角指令锁定枪械摇晃
  • python代码检测在线
  • javascript学习指南
  • python中pyinstaller
  • 税务巡视组一般检查什么
  • 电子专票操作视频
  • 个人所得税是哪种税率
  • 宁夏地税领导班子名单
  • 新都税务局咨询电话
  • 亿企赢工作前景怎么样
  • 国家税务总局河北地税局
  • 广西教师初级职称申报时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设