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 );
},
creator攝像機的使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.