WebGL(四)—— 第一个WEBGL程序

WebGL(四)—— 第一个WEBGL程序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--    首先创建一个canvas元素-->
    <canvas id="webgl" width="500" height="500" style="background-color: lemonchiffon"></canvas>
    <script>
        //获取canvas元素
        let canvas = document.getElementById("webgl");
        //声明上下文环境,webgl
        let gl = canvas.getContext("webgl");

        //着色器
            //顶点着色器:描述顶点属性,比如坐标,大小
            //注意:gl_Position的前三个坐标x,y,z,取值范围都是[-1,1],x,y的正方向和笛卡尔坐标系相同,z正方向是指朝向我们的方向,以图形的的中心点作为x,y,z
            let vertexShaderSource = "void main(){"+
                "   gl_PointSize=20.0;"+
                "   gl_Position=vec4(0,0,1,1.0);"+
                "}";
            //vec4类型:浮点型   vec2 vec3 vec4 mat2 mat3 mat4
            //片元着色器:处理光照和颜色的程序(处理像素的程序)
            //gl_FragColor分别代表的是RGBA四个值,红绿蓝和Alpha(透明度,0-1)
            let fagShaderSource = "void main(){"+
                "gl_FragColor = vec4(1.0,0.0,0.0,1);"+
                "}";
        //初始化着色器
        let initShader = function(gl,vertexShaderSource,fagShaderSource){
            //创建顶点着色器
            let vertexShader = gl.createShader(gl.VERTEX_SHADER);
            //创建片元着色器对象
            let fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
            //引入顶点和片元着色器源码
            gl.shaderSource(vertexShader,vertexShaderSource);
            gl.shaderSource(fragmentShader,fagShaderSource);
            //编译顶点和片元着色器,编译方法是compileShader,用来编译GLSL着色器语言,把我们上面写的字符串代码变成二进制数据
            gl.compileShader(vertexShader);
            gl.compileShader(fragmentShader);
            //创建一个webgl的program对象,创建用createProgram方法
            let program = gl.createProgram();
            //把准备好的着色器对象添加到program中
            gl.attachShader(program,vertexShader);
            gl.attachShader(program,fragmentShader);
            //把program与webgl做链接
            gl.linkProgram(program);
            //把定义好的program程序添加到当前的渲染状态中
            gl.useProgram(program);


        }
        initShader(gl,vertexShaderSource,fagShaderSource);
        //绘制图像
        gl.drawArrays(gl.POINTS,0,1);



    </script>

</body>
</html>

效果:
在这里插入图片描述

留一个疑问:在HTML中,webgl是用字符串实现的,有没有更加高效的方法?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值