位置: 编程技术 - 正文

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

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

  • 二手房交易税费2023新规定
  • 一般纳税人发生特定应税销售行为
  • 小规模纳税人出租
  • 租赁厂房电费
  • 新换财务软件如何登录
  • 开票软件服务费全额抵扣怎么做账
  • 退回投资款转为借款怎么记账
  • 不征税收入怎么申报企业所得税
  • 行政单位在建工程会计分录
  • 没收到发票可以做成本吗
  • 委外加工半成品入库的会计分录
  • 福利费可以用什么科目
  • 本期有进项没有销项需要转出增值税吗?
  • 增值税发票清单怎么导出
  • 增值税开票流程图解
  • 增值税专用发票可以开电子发票吗
  • 电子承兑汇票接收时间是多久
  • 个人有形动产租赁
  • 汇兑产出的收益计入
  • 挖机所有权需要办理什么手续吗
  • 研发费加计扣除申报表怎么填
  • 下花园6路公交车时间表
  • mac怎么把通知栏固定
  • linux中不能使用的shell
  • 筹建期间费用计什么科目
  • 房地产企业将开发产品抵押后再销售
  • 商会账目
  • 享受企业所得税优惠政策的农产品初加工范围
  • 采购周转材料会议记录
  • 领用自产库存商品
  • 水养绿萝怎么养护长得才茂盛
  • 特殊性税务处理的条件
  • 附有销售退回条款的销售中,每一资产负债表日
  • 现金折扣发生销售退回
  • php.ini详解
  • 私企股权转让程序
  • 进项税额资产还是负债
  • 程序员的表白情书
  • thinkphp 手机号和用户名同时登录
  • 工程项目成本核算的依据主要有
  • 14个Python处理Excel的常用操作,非常好用
  • 增值税一般纳税人是什么意思
  • 通讯费补贴会计怎么做账
  • 小规模附加税优惠政策2021
  • 资产减值损失属于营业外支出吗
  • 美团算钱
  • 资产负债表怎么算
  • 2023小型微利企业税收优惠
  • 京东开专用发票需要用公户付款吗?
  • 个体户季报要抄税吗
  • 长期待摊费用待抵扣税金
  • 机场工作人员的家属票
  • 出口货物 增值税
  • 亏损企业所得税汇算清缴后调减
  • 公司在筹备阶段怎么办
  • 购入房屋建筑物进项税额抵扣
  • 设备基础属于什么基础
  • 车辆折旧费法律支持吗
  • 如何把凭证装订机弄坏
  • 什么是结账?结账前要做哪些准备工作?
  • 获取sqlsession
  • mac下安装python
  • debian iso
  • freebsd怎么用
  • 退休后归什么部门管
  • win8系统怎么设置
  • win7显示网上邻居图标
  • node. js教程
  • cpu时钟预取实例是什么
  • 查看分区文件格式
  • 猫的所有视频
  • unity碰撞抖动怎么解决
  • 安卓画图板
  • jq写css样式
  • rst.open
  • python怎么自定义函数
  • 增值税9%税率适用范围2023
  • 纳税人状态怎么填
  • 税务社保费是什么意思
  • 核定征收申报表填写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设