博客
关于我
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 order by与limit混用陷阱
查看>>
mysql order by多个字段排序
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql replace用法
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql skip-grant-tables_MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql sysbench测试安装及命令
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
MySQL Troubleshoting:Waiting on query cache mutex
查看>>