creator攝像機的使用

    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 );
    },
發佈了12 篇原創文章 · 獲贊 1 · 訪問量 4922
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章