3、绘制线

绘制线

相关讲解

效果

webgl.LINE_LOOP

webgl.LINES

webgl.LINE_STRIP

代码

复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>绘制点坐标</title>
    <script src="./glMatrix-0.9.6.min.js"></script>
    <script>
        var webgl;
        var projMat4;
        var projMat4 = mat4.create()
        // 顶点着色器
        var vertexString = `
        attribute vec4 a_posiiton;
        uniform mat4 proj;
        void main(){
            gl_Position=proj*a_posiiton;
        }
        `
        // 片元着色器
        var fragmentString = `
        void main(){
            gl_FragColor=vec4(1.0,0,1.0,1.0);
        }
        `
        // 入口函数
        function init() {
            initWebgl()
            initShader()
            initBuffer()
            draw()
        }
        // webgl初始化函数
        function initWebgl() {
            let webglDiv = document.getElementById("webglCanvas")
            // 获取webgl的上下文            
            webgl = webglDiv.getContext("webgl")
            // 设置webgl的视觉区域
            webgl.viewport(0, 0, webglDiv.clientWidth, webglDiv.clientHeight)
            // 设置webgl的投影
            mat4.ortho(0, webglDiv.clientWidth, webglDiv.clientHeight, 0, -1.0, 1.0, projMat4)

        }
        // shader初始化函数
        function initShader() {
            let vsshader = webgl.createShader(webgl.VERTEX_SHADER)
            let fsshader = webgl.createShader(webgl.FRAGMENT_SHADER)
            webgl.shaderSource(vsshader, vertexString)
            webgl.shaderSource(fsshader, fragmentString)
            // 将shader编译进行打包
            webgl.compileShader(vsshader)
            webgl.compileShader(fsshader)
            let program = webgl.createProgram()
            webgl.attachShader(program, vsshader)
            webgl.attachShader(program, fsshader)

            webgl.linkProgram(program)
            webgl.useProgram(program)
            webgl.program = program
        }
        // 数据缓冲区初始化函数
        function initBuffer() {
            let aPosition = webgl.getAttribLocation(webgl.program, "a_posiiton")
            let arr = [
                100.0, 100.0, 0, 1.0,
                200.0, 200.0, 0, 1.0,
                300.0, 200.0, 0, 1.0,
                400.0, 600.0, 0, 1.0
            ]
            let pointPosition = new Float32Array(arr)
            let lineBuffer = webgl.createBuffer()
            webgl.bindBuffer(webgl.ARRAY_BUFFER, lineBuffer)
            webgl.bufferData(webgl.ARRAY_BUFFER, pointPosition, webgl.STATIC_DRAW)
            webgl.enableVertexAttribArray(aPosition)
            //把值赋给shader
            webgl.vertexAttribPointer(aPosition, 4, webgl.FLOAT, false, 4 * 4, 0 * 4)
            // webgl.vertexAttrib4fv(aPosition, pointPosition)
            let uniformproj = webgl.getUniformLocation(webgl.program, "proj")
            webgl.uniformMatrix4fv(uniformproj, false, projMat4)
        }
        // webgl的绘制函数
        function draw() {
            webgl.clearColor(0.0, 0.0, 0.0, 1.0)
            //  颜色检测
            webgl.clear(webgl.COLOR_BUFFER_BIT | webgl.DEPTH_BUFFER_BIT)
            // webgl.drawArrays(webgl.LINE_LOOP, 0, 4)
            webgl.drawArrays(webgl.LINE_STRIP, 0, 4)
            // webgl.drawArrays(webgl.LINES, 0, 4)
        }
    </script>
</head>

<body onload="init()">
    <canvas id="webglCanvas" width="1000" height="800"></canvas>
</body>

</html>
相关推荐
用户831348593069813 小时前
Cesium 实现行政区反向遮罩镂空效果(自定义暗色蒙层+矢量/影像底图切换)
vue.js·webgl·cesium
孪生前端1 天前
Three.js 做医疗数字孪生:从空场景到可漫游楼层(附最小骨架)
webgl
点量云实时渲染-小芹1 天前
UE/Unity/Webgl模型在信创服务器上实时渲染推流的可行性分析
unity·webgl·云渲染信创·国产实时渲染·ue信创云推流
孪生前端2 天前
如何用配置驱动一套 Three.js 数字孪生模板
webgl
用户83134859306986 天前
Vue+Threejs实现人物奔跑场景
vue.js·webgl·three.js
元气少女小圆丶6 天前
unity发布web嵌入到前端页面的接受参数
前端·unity·webgl
WebGIS开发8 天前
WebGIS开发进阶教程①:WebGL坐标系
gis·webgl·gis开发
虚焦像素_9 天前
MapLibre GL 实战:一套引擎搞定 2D 平面与 3D 球面
webgl
山河木马11 天前
GPU自动处理专题4-填充覆盖区域(光栅化)
javascript·webgl·计算机图形学
智商偏低12 天前
WebGL 百万线段高性能 Demo(批量绘制,无循环绘制)
webgl