代码之家  ›  专栏  ›  技术社区  ›  Josiki

将webglearth画布的输出绘制为2d画布

  •  0
  • Josiki  · 技术社区  · 7 年前

    我试图复制运行webglearth的画布的输出( http://www.webglearth.org/ this

    我的代码是:

    <html>
    <body>
        <div id="earthDiv" style="background-color:rgba(255,0,255,0.5); width:500px; height: 500px;"></div>
        <canvas id="canvas" style="background-color:rgba(0,255,0,0.5); width:500px; height: 500px;"></canvas>
    
        <script src="http://www.webglearth.com/v2/api.js"></script>
    
        <script type="text/javascript">
            window.onload = function () {
    
                var earth = new WE.map("earthDiv");
                var earthCanvas = earth.canvas;
                var earthContext = earthCanvas.getContext("webgl", {
                    preserveDrawingBuffer: true,
                });
    
                WE.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {}).addTo(earth);
    
                var canvas = document.getElementById("canvas");
                var context = canvas.getContext("2d");
                setInterval(function () {
                    context.drawImage(earthContext.canvas, 0, 0);
                }, 1000);
            };
        </script>
    </body>
    </html>
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Josiki    7 年前

    https://github.com/webglearth/webglearth2/issues/104 ,其中画布的上下文在第一次获取时需要“preserveDrawingBuffer:true”。

    它可以通过改变

     Cesium.Scene({
                canvas: this.canvas,
                contextOptions: { webgl: { alpha: !0 !== c.sky } }
            });
    

    http://www.webglearth.com/v2/api.js

    Cesium.Scene({
                canvas: this.canvas,
                contextOptions: { webgl: { alpha: !0 !== c.sky, preserveDrawingBuffer: true } }
            });
    

    (然后将其保存并作为本地文件使用)。

    earth.getScreenshot(function(dataUrl) {...}))
    

    (见 https://github.com/webglearth/webglearth2/issues/60