1、绘制点

绘制点

  • 效果
  • 代码
  • 过程问题
    • [1、WebGL: INVALID_OPERATION:useProgram: program not valid](#1、WebGL: INVALID_OPERATION:useProgram: program not valid)

效果

代码

复制代码
<!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;
            gl_PointSize=60.0;
        }
        `
        // 片元着色器
        var fragmentString = `
        void main(){
            gl_FragColor=vec4(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 pointPosition = new Float32Array([100.0, 100.0, 0.0, 1.0])
            // 获取变量
            let aPosition = webgl.getAttribLocation(webgl.program, "a_posiiton")
            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.POINTS, 0, 1)//0为索引,1为绘制的数量
        }
    </script>
</head>

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

</html>

过程问题

1、WebGL: INVALID_OPERATION:useProgram: program not valid

解决:函数中加分号

相关推荐
山海鲸可视化14 小时前
数字孪生项目案例 | 物流园区可视化
webgl·可视化·数据可视化·数据表格·搜索框
图扑软件1 天前
50ms 级实时数字孪生|汽车先进制造车间工艺流程
3d·数据采集·webgl·数字孪生·可视化·opc ua·汽车制造
子兮曰1 天前
SuperSplat 深度解析:7.6K Stars 的浏览器端 3D 高斯泼溅编辑器 — 在 Web 上编辑现实
前端·javascript·webgl
supermapsupport5 天前
SuperMap iClient3D for WebGL 根据实体高度进行差异化颜色渲染
webgl
HYCS6 天前
用pixijs实现fabricjs(一):FakeCanvasRenderingContext2D
javascript·webgl·canvas
qiao若huan喜6 天前
14、webgl 基本概念 + 图形变换
webgl
李伟_Li慢慢8 天前
ShaderToy-山峦+蓝天+白云
前端·webgl
爱看书的小沐9 天前
【小沐杂货铺】基于Three.js绘制三维艺术画廊3DArtGallery (Three.js,WebGL)
javascript·3d·webgl·three.js·babylon.js·三维画廊
爱看书的小沐9 天前
【小沐学GIS】基于C++渲染三维飞行仿真Flight Simulation(OpenGL )第十三期
c++·qt·webgl·opengl·飞行仿真·flight
千鼎数字孪生-可视化13 天前
webGPU即将到来,和原生GPU有啥区别呢?
webgl·网页3d