美文网首页
WebGL-绘制三角形

WebGL-绘制三角形

作者: 写前端的大叔 | 来源:发表于2020-03-14 22:08 被阅读0次

WebGL中,绘制三角形是很常的,是绘制其它复杂图形的基础,因为其它图形都是由三角形组成的,像矩形,是由两个三角形构成的,在绘制一个矩形时,需要绘制两个三角形,这里来介绍下怎么绘制三角形,绘制三角形需要以下10步来完成。

  • 第一步:获取canvas
  • 第二步:获取webgl
  • 第三步:创建着色器程序
  • 第四步:编译着色器
  • 第五步:合并程序
  • 第六步:创建顶点坐标
  • 第七步:创建缓冲区
  • 第九步:设置背影颜色
  • 第十步:绘制三角形

绘制出来的三角形如下所示:


三角形.png
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>webgl</title>
</head>
<style>
    #canvas {
        border: 1px solid red;
        width: 500px;
        height: 500px;
    }
</style>

<body>
    <canvas id='canvas'></canvas>
</body>
<script>
    init();
    function init() {
        //第一步:获取canvas
        let canvas = document.getElementById('canvas')

        //第二步:获取webgl
        let gl = canvas.getContext('webgl');
        if (!gl) {
            alert('浏览器不支持webgl');
            return;
        }

        //第三步:创建着色器程序
        //顶点着色器
        let VSHADER_SOURCE = `
            attribute vec3 a_Position;
            void main(){
                gl_Position = vec4(a_Position,1.0);
            }
        `
        //片段着色器
        let FSHADER_SOURCE = `
            //设置中等精度
            precision mediump float;
            void main(){
                gl_FragColor = vec4(1.0,0.0,0.0,1.0);
            }
        `
        //第四步:编译着色器
        //1.创建着色器
        let vShader = gl.createShader(gl.VERTEX_SHADER);
        if (!vShader) {
            alert('创建着色器失败')
            return;
        }
        //2.上传代码
        gl.shaderSource(vShader, VSHADER_SOURCE);
        //3.编译代码
        gl.compileShader(vShader);

        let fShader = gl.createShader(gl.FRAGMENT_SHADER);
        if (!fShader) {
            alert('创建着色器失败')
            return;
        }
        gl.shaderSource(fShader, FSHADER_SOURCE);
        gl.compileShader(fShader);

        //第五步:合并程序
        //1.创建程序
        let program = gl.createProgram();
        //2.链接着色器
        gl.attachShader(program, vShader);
        gl.attachShader(program, fShader);
        gl.linkProgram(program);
        // 连接失败的检测
        if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
            alert("链接失败");
            return;
        }
        //3.使用程序
        gl.useProgram(program);


        //第六步:创建顶点坐标
        var count = 3;
        var vertices = new Float32Array([
            0.0, 1.0, 0.0,
            -1.0, -1.0, 0.0,
            1.0, -1.0, 0.0
        ]);
        //第七步:创建缓冲区
        //1.创建
        var vertexBuffer = gl.createBuffer();
        //2.绑定缓冲区
        gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
        //3.向缓冲区写数据
        gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
        //第八步:获取坐标点并赋值
        let a_Position = gl.getAttribLocation(program, 'a_Position');
        if (a_Position < 0) {
            alert('没有获取到坐标点')
            return;
        }
        gl.vertexAttribPointer(a_Position, count, gl.FLOAT, false, 0, 0);
        //连接a_Position变量与分配给它的缓冲区对象
        gl.enableVertexAttribArray(a_Position);
        
        //第九步,设置背影颜色
        gl.clearColor(1.0, 1.0, 0, 1);
        gl.clear(gl.COLOR_BUFFER_BIT);
        //第十步,绘制三角形
        gl.drawArrays(gl.TRIANGLES, 0, count)
    }
</script>

</html>

相关文章

  • WebGL-绘制三角形

    在WebGL中,绘制三角形是很常的,是绘制其它复杂图形的基础,因为其它图形都是由三角形组成的,像矩形,是由两个三角...

  • 绘制三角形,矩形,圆形

    绘制三角形 绘制矩形 绘制圆形

  • WebGL-绘制正方形

    随着三维地图的越来越流行,作为一个giser不会WebGL都不好意思说自己是做webgis的了。实现一些基本的图形...

  • OpenGL ES for Android 绘制矩形和正方形

    前面的文章介绍了如何 绘制三角形,在OpenGL ES中没有直接绘制矩形的方式,通过绘制2个三角形的方式绘制矩形。...

  • Objective-C ios图形各种线条绘制

    IOS 图形绘制 绘制直线 矩形绘制 三角形绘制 任意弧形绘制 圆形绘制 绘制的属性 虚线的绘制 UIView d...

  • canvas画三角形

    绘制一个三角形例如,绘制三角形的代码如下: 输出看上去如下:

  • 43. 线段绘制

    本文解释线段绘制,并通过线段绘制出三角形 线段与线段构成的三角形如下:

  • canvas画矩形圆形直线三角形

    开发笔记之-canvas画矩形圆形直线三角形 1.页面如下: 2.绘制长方形 3.绘制圆 4.绘制三角形 5.绘制...

  • canvas绘制仪表盘

    效果图 html添加canvas js获取canvas 定义方法绘制圆环 绘制刻度线 绘制文字 绘制圆 绘制三角形...

  • css绘制三角形和对号

    CSS绘制三角形 div css 效果 CSS绘制对号 div css 效果

网友评论

      本文标题:WebGL-绘制三角形

      本文链接:https://www.haomeiwen.com/subject/yoeoshtx.html