博客
关于我
creator摄像机的使用
阅读量:511 次
发布时间:2019-03-07

本文共 2561 字,大约阅读时间需要 8 分钟。

onToast() {        //0        //clearFlags一般除了最底层的摄像机里需要全部打勾,其他摄像机就不需要勾选了,        //不然上层摄像机(depth == -1)会把下层的摄像机(depth == -2)画面清除。//1. // depth// 摄像机深度,用于决定摄像机的渲染顺序。值越大,则摄像机越晚被渲染。// 越晚被渲染,场景显示的是最晚的摄像机 所照到的东西。// 我这Main Camera应该是最晚被渲染(值最大)//2.分组// Main Camera不包含所要截图分组// Camera只包含所要截图分组// 被截图的节点,默认分组default要修改。//3.摄像机要跟随这所要截取的节点,否则有可能截取不到。(可以跟随也可以不跟随)// 如果不跟随,则可以利用第0条,将想要截取的图,用下层摄像机抓取,并同时利用上层摄像机清除下层摄像机的画面。// 场景显示的是最上层摄像机所抓取的场景。下层摄像机此时是可抓取所要截取的同组节点。        cc.Camera.cameras;        cc.log("cc.Camera.cameras ==", cc.Camera.cameras);        //let node = new cc.Node();        //node.parent = cc.director.getScene();        //let camera = node.addComponent(cc.Camera);        let smile = cc.find("smile", this.node);        //会通过查找当前所有摄像机的 cullingMask 是否包含节点的 group 来获取第一个匹配的摄像机。        let camera = cc.Camera.findCamera(smile);        cc.log("camera ==", camera);        camera.x = smile.x;        camera.y =  smile.y;        //camera = cc.Camera.cameras[1];        // 设置你想要的截图内容的 cullingMask        //camera.cullingMask = 0xffffffff;        // 新建一个 RenderTexture,并且设置 camera 的 targetTexture 为新建的 RenderTexture,这样 camera 的内容将会渲染到新建的 RenderTexture 中。        let texture = new cc.RenderTexture();        let gl = cc.game._renderContext;        let x = smile.width*5;        let y = smile.height*5;        // 如果截图内容中不包含 Mask 组件,可以不用传递第三个参数        texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height, gl.STENCIL_INDEX8);        //texture.readPixels (null, x, y, x, y)        //texture.initWithSize(x, y);        camera.targetTexture = texture;        // 渲染一次摄像机,即更新一次内容到 RenderTexture 中        camera.render();        // 这样我们就能从 RenderTexture 中获取到数据了        let data = texture.readPixels();        // 接下来就可以对这些数据进行操作了        let canvas = document.createElement('canvas');        let ctx = canvas.getContext('2d');        let width = canvas.width = texture.width;        let height = canvas.height = texture.height;        canvas.width = texture.width;        canvas.height = texture.height;        let rowBytes = width * 4;        for (let row = 0; row < height; row++) {            let srow = height - 1 - row;            let imageData = ctx.createImageData(width, 1);            let start = srow * width * 4;            for (let i = 0; i < rowBytes; i++) {                imageData.data[i] = data[start + i];            }            ctx.putImageData(imageData, 0, row);        }        let dataURL = canvas.toDataURL("image/jpeg");        let img = document.createElement("img");        img.src = dataURL;        cc.log("dataURL == ",dataURL );    },

转载地址:http://easjz.baihongyu.com/

你可能感兴趣的文章
mysql 两列互转
查看>>
MySQL 中开启二进制日志(Binlog)
查看>>
MySQL 中文问题
查看>>
MySQL 中日志的面试题总结
查看>>
mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
查看>>
MySQL 中的外键检查设置:SET FOREIGN_KEY_CHECKS = 1
查看>>
Mysql 中的日期时间字符串查询
查看>>
mysql 中索引的问题
查看>>
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
MYSQL 主从同步文档的大坑
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
Mysql 事务知识点与优化建议
查看>>
Mysql 优化 or
查看>>