1.知识点
1.1.画布
Canvas对象是在网页中的画布对象,具有2D和3D绘图功能。
canvas.getContext('2d')可获取画布的二维绘制对象(CanvasRenderingContext2D);canvas.getContext('webgl') canvas.getContext('webgl2')可获取画布的三维绘制对象(WebGLRenderingContext | WebGL2RenderingContext);
1.2.WebGL2RenderingContext
WebGL2RenderingContext接口提供基于 OpenGL ES 3.0 的绘图上下文,用于在 HTML <canvas> 元素内绘图。
1.2.1.createShader(Type)
        用于创建一个 WebGLShader 着色器对象,该对象可以使用shaderSource()和 complileShader()方法配置着色器代码。参数为gl.VERTEX_SHADER 或 gl.FRAGMENT_SHADER两者中的一个。
1.2.2.shaderSource(shader,source)
用于设置 WebGLShader 着色器(顶点着色器及片元着色器)的 GLSL 程序代码。
1.2.3.compileShader(shader)
用于编译一个 GLSL 着色器,使其成为为二进制数据,然后就可以被WebGLProgram对象所使用。
1.2.4.createProgram() 
 
用于创建和初始化一个 WebGLProgram 对象。
1.2.5.attachShader(program, shader)
负责往 WebGLProgram 添加一个片段或者顶点着色器。
1.2.6.linkProgram(program)
链接给定的WebGLProgram,从而完成为程序的片元和顶点着色器准备 GPU 代码的过程。
1.2.7.useProgram(program)
将定义好的WebGLProgram 对象添加到当前的渲染状态中
1.2.8.drawArrays(mode, first, count)
用于从向量数组中绘制图元
2.代码
<script setup lang="ts">
    import { onMounted, ref } from "vue";
    onMounted(() => {
        const canvas = document.getElementById("canvas") as HTMLCanvasElement;
        //通过方法getContext()获取WebGL上下文
        const gl = canvas.getContext('webgl');
        const canvans2d=canvas .getContext("2d")
        //顶点着色器源码
        const vertexShaderSource = `
            void main(){
                //给内置变量gl_PointSize赋值像素大小
                 gl_PointSize=20.0;
                 //顶点位置,位于坐标原点
                  gl_Position =vec4(0.0,0.0,0.0,1.0);
            }
        `;
        const fragShaderSource = `
            void main(){
                //定义片元颜色
                gl_FragColor = vec4(1.0,1.0,1.0,1.0);
            }
        `;
         //创建顶点着色器对象
        const vertexShader=gl.createShader(gl.VERTEX_SHADER);;
         
         //创建片元着色器对象
        const  fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
         //引入顶点、片元着色器源代码
         gl.shaderSource(vertexShader, vertexShaderSource);
         gl.shaderSource(fragmentShader, fragShaderSource);
         
        //编译顶点、片元着色器
        gl.compileShader(vertexShader);
        gl.compileShader(fragmentShader);
        //创建程序对象program
        const  program = gl.createProgram();
          
        //附着顶点着色器和片元着色器到program
        gl.attachShader(program, vertexShader);
        gl.attachShader(program, fragmentShader);
         
      
        //链接program
        gl.linkProgram(program);
        //使用program
        gl.useProgram(program);
        gl.drawArrays(gl.POINTS,0,1)
    });
    
</script> 
<template>
    <div class="demo_main">
        <canvas id="canvas"></canvas>
    </div>
</template>
<style scoped>
    #canvas {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
        background-color: blue;
    }
    .demo_main {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
    }
</style>

