91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用webgl方式加載point

發布時間:2021-12-30 14:30:26 來源:億速云 閱讀:188 作者:iii 欄目:大數據

本篇內容介紹了“怎么用webgl方式加載point”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

這種方式不同于使用Leaflet的API加載point,這個是在地圖的上層覆蓋一個canvas對象,使用的是開源的L.CanvasOverlay.js,github上可以搜索到這個,將point繪制在canvas上,在地圖范圍或級別的動態變化時,計算vertex shader中的變換矩陣,保持和地圖上的位置一致。

json坐標數據量:

怎么用webgl方式加載point

關鍵的shader:

<!-- vertex shader -->

    <script id="vshader" type="x-shader/x-vertex">

        uniform mat4 u_matrix;

        attribute vec4 a_vertex;

        attribute float a_pointSize;

        attribute vec4 a_color;

        varying vec4 v_color;

        void main() {

        // Set the size of the point

        gl_PointSize =  a_pointSize; 

        // multiply each vertex by a matrix.

        gl_Position = u_matrix * a_vertex;  

        // pass the color to the fragment shader

        v_color = a_color;

        }

    </script>

    <!-- fragment shader --> 

    <script id="fshader" type="x-shader/x-fragment">

        precision mediump float;

        varying vec4 v_color;

        void main() {

        float border = 0.05;

        float radius = 0.5;

        vec4 color0 = vec4(0.0, 0.0, 0.0, 0.0);

        vec4 color1 = vec4(v_color[0], v_color[1], v_color[2], 0.2);

        vec2 m = gl_PointCoord.xy - vec2(0.5, 0.5);

        float dist = radius - sqrt(m.x * m.x + m.y * m.y);

        float t = 0.0;

        if (dist > border)

        t = 1.0;

        else if (dist > 0.0)

        t = dist / border;

        // float centerDist = length(gl_PointCoord - 0.5);

        // works for overlapping circles if blending is enabled

        gl_FragColor = mix(color0, color1, t);

        /*

        // -- another way for circle

        float centerDist = length(gl_PointCoord - 0.5);

        float radius = 0.5;

        // works for overlapping circles if blending is enabled

        gl_FragColor = vec4(v_color[0], v_color[1], v_color[2], 0.2 * step(centerDist, radius));

        */

        /*

        // simple circles

        float d = distance (gl_PointCoord, vec2(0.5,0.5));

        if (d < 0.5 ){

        gl_FragColor =vec4(v_color[0], v_color[1], v_color[2], 0.2);

        }

        else{

        discard;

        }

        */

        // -- squares

        //gl_FragColor = v_color;

        //gl_FragColor =vec4(v_color[0], v_color[1], v_color[2], 0.2); // v_color;

        }

    </script>

// -- converts latlon to pixels at zoom level 0 (for 256x256 tile size) , inverts y coord )

        // -- source : http://build-failed.blogspot.cz/2013/02/displaying-webgl-data-on-google-maps.html

//將經緯度轉換像素的代碼,在第一級別進行轉換

        function LatLongToPixelXY(latitude, longitude) {

            var pi_180 = Math.PI / 180.0;

            var pi_4 = Math.PI * 4;

            var sinLatitude = Math.sin(latitude * pi_180);

            var pixelY = (0.5 - Math.log((1 + sinLatitude) / (1 - sinLatitude)) / (pi_4)) * 256;

            var pixelX = ((longitude + 180) / 360) * 256;

            var pixel = { x: pixelX, y: pixelY };

            return pixel;

        }

//計算轉換的矩陣

function drawingOnCanvas(canvasOverlay, params) {

            if (gl == null) return;

            gl.clear(gl.COLOR_BUFFER_BIT);

            pixelsToWebGLMatrix.set([2 / canvas.width, 0, 0, 0, 0, -2 / canvas.height, 0, 0, 0, 0, 0, 0, -1, 1, 0, 1]);

            gl.viewport(0, 0, canvas.width, canvas.height);

            var pointSize = Math.max(leafletMap.getZoom() - 4.0, 1.0);

            gl.vertexAttrib1f(gl.aPointSize, pointSize);

            // -- set base matrix to translate canvas pixel coordinates -> webgl coordinates

            mapMatrix.set(pixelsToWebGLMatrix);

            var bounds = leafletMap.getBounds();

            var topLeft = new L.LatLng(bounds.getNorth(), bounds.getWest());

            var offset = LatLongToPixelXY(topLeft.lat, topLeft.lng);

            // -- Scale to current zoom

            var scale = Math.pow(2, leafletMap.getZoom());

            scaleMatrix(mapMatrix, scale, scale);

            translateMatrix(mapMatrix, -offset.x, -offset.y);

            // -- attach matrix value to 'mapMatrix' uniform in shader

            gl.uniformMatrix4fv(u_matLoc, false, mapMatrix);

            gl.drawArrays(gl.POINTS, 0, numPoints);

        }

“怎么用webgl方式加載point”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

抚远县| 名山县| 新建县| 米易县| 柳州市| 达拉特旗| 班玛县| 安阳市| 舞钢市| 阳原县| 蚌埠市| 呈贡县| 中西区| 古交市| 无锡市| 沙洋县| 桂阳县| 涟源市| 社旗县| 广昌县| 颍上县| 安图县| 鸡泽县| 特克斯县| 玉屏| 阆中市| 汤阴县| 石柱| 监利县| 平阳县| 合阳县| 南漳县| 卢龙县| 郁南县| 玉溪市| 浙江省| 雅安市| 屏东市| 临汾市| 来凤县| 广东省|