博客
关于我
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进阶篇SQL优化(InnoDB锁问题排查与解决)
查看>>
Mysql进阶索引篇03——2个新特性,11+7条设计原则教你创建索引
查看>>
mysql远程连接设置
查看>>
MySql连接出现1251Client does not support authentication protocol requested by server解决方法
查看>>
Mysql连接时报时区错误
查看>>
MySql连接时提示:unknown Mysql server host
查看>>
MySQL连环炮,你扛得住嘛?
查看>>
mysql逗号分隔的字符串如何搜索
查看>>
MySQL通用优化手册
查看>>
Mysql通过data文件恢复
查看>>
MYSQL遇到Deadlock found when trying to get lock,解决方案
查看>>
MYSQL遇到Deadlock found when trying to get lock,解决方案
查看>>
mysql部署错误
查看>>
MySQL配置信息解读(my.cnf)
查看>>
Mysql配置文件my.ini详解
查看>>
MySQL配置文件深度解析:10个关键参数及优化技巧---强烈要求的福利来咯。
查看>>
Mysql配置表名忽略大小写(SpringBoot连接表时提示不存在,实际是存在的)
查看>>
mysql配置读写分离并在若依框架使用读写分离
查看>>
MySQL里为什么会建议不要使用SELECT *?
查看>>
MySQL里的那些日志们
查看>>