6、drawElements绘制多个三角形

drawElements绘制多个三角形

效果

代码

复制代码
<!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 arrindex=[
                0,1,2,
                0,3,4,
            ]
            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,
                500.0, 700.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)

            let indexArr=new Uint16Array(arrindex);
            let indexBuffer=webgl.createBuffer();
            webgl.bindBuffer(webgl.ELEMENT_ARRAY_BUFFER,indexBuffer)
            webgl.bufferData(webgl.ELEMENT_ARRAY_BUFFER,indexArr, webgl.STATIC_DRAW)
            // 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.drawElements(webgl.TRIANGLES,6, webgl.UNSIGNED_SHORT,0)
        }
    </script>
</head>

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

</html>
相关推荐
Jmyd01231 天前
WebGL 三维党史馆怎么扛住 720 度全景与移动端弱网?
webgl·三维数字化
limit00753 天前
三维 WebGIS 工具选型:加载、样式、分析、交付,一套界面能做完什么
android·前端·web3·安卓·webgl
总要学点什么4 天前
第79篇:数据可视化-模拟迁徙效果——把三十条航线画成会飞的弧
3d·信息可视化·数据挖掘·数据分析·gis·webgl·cesium
limit00755 天前
三维模型悬空与切片偏移的排查顺序
低代码·3d·arcgis·web3·安卓·webgl
Sakura_j_h_5 天前
Three.js 单文件离线机械臂工作台:爆炸图、透明外壳与剖面
前端·机械臂·webgl·three.js·1024程序员节·esbuild
总要学点什么12 天前
第65篇:地图卷帘控件——点「关闭卷帘」,消失的却是右边那半张地图
信息可视化·gis·webgl·cesium·空间分析
总要学点什么13 天前
第63篇:3DTiles-大雁塔模型——190 块瓦片不是八叉树,抬高的却是球心那条法线
3d·数据挖掘·数据分析·gis·webgl
Jmyd012316 天前
3D数字协同设计实训空间技术架构解析:从三维采集到WebGL虚拟展示的全链路实现
3d·架构·webgl·虚拟实训
总要学点什么16 天前
第57篇:三维场景演示_基础版——同一秒,播过去和拖过去差出一千多米
3d·数据挖掘·数据分析·gis·webgl
总要学点什么17 天前
第55篇:空间分析-剖面分析——红线走大圆,剖面却按经纬直线采样
前端框架·gis·webgl·cesium·空间分析