webGL真难..就画一个点,快整死我了

本文详细描述了在webGL中编写大量代码来创建一个基本的蓝色正方形的过程,对比HTML/CSS的简洁性,突显了webGL的灵活性但也显得复杂。
摘要由CSDN通过智能技术生成

以下代码 有多离谱,我写了两个着色器代码vertexString,fragmentString,

initshaders 在这个函数中 定义着色器基础分别是

创建着色器,

定义着色器源,

编译着色器,

创建着色器程序,

将着色器附加到刚刚创建的着色器程序上,

链接着色器程序,

使用着色器程序,

全都要我自己写,最终实现的效果是这样的,对没错,仅仅是一个蓝色的正方形

80多行代码........

正常写html,css的话,2个div搞定,webGL那么离谱的吗,但是也的确是灵活,我觉得一般人很难玩得转这东西

let webgl;

let projmat4 = mat4.create();

// let meta = mat4.create()

let vertexString = `

    attribute vec4 a_position;

    uniform mat4 proj;

    void main(){

        gl_Position = proj * a_position;

        gl_PointSize = 60.0;

    }

`

let fragmentString = `

    void main(){

        gl_FragColor = vec4(0.0,0.0,1.0,1.0);

    }

`

function init(){

    initwebgl();

    initshaders();

    initbuffers();

    draw();

}

function initwebgl(){

    webglDIV = document.getElementById("webgl");

    webgl = webglDIV.getContext("webgl");

    webgl.viewport(0,0,webglDIV.width,webglDIV.height);

    mat4.ortho(0,webglDIV.width,0,webglDIV.height,-1,1,projmat4);

   

}

function initshaders(){

let vertexShader = webgl.createShader(webgl.VERTEX_SHADER);

let fragmentShader = webgl.createShader(webgl.FRAGMENT_SHADER);

webgl.shaderSource(vertexShader,vertexString);

webgl.shaderSource(fragmentShader,fragmentString);

webgl.compileShader(vertexShader);

webgl.compileShader(fragmentShader);

let program = webgl.createProgram();

webgl.attachShader(program,vertexShader);

webgl.attachShader(program,fragmentShader);

webgl.linkProgram(program);

webgl.useProgram(program);

webgl.program = program;

}

function initbuffers(){

let pointPosition = new Float32Array([100,100,0.0,1.0]);

let a_position = webgl.getAttribLocation(webgl.program,"a_position");

webgl.vertexAttrib4fv(a_position,pointPosition);

let proj = webgl.getUniformLocation(webgl.program,"proj");

webgl.uniformMatrix4fv(proj,false,projmat4);

}

function draw(){

webgl.clearColor(0.0,0.0,0.0,1.0);

webgl.clear(webgl.COLOR_BUFFER_BIT);

webgl.drawArrays(webgl.POINTS,0,1);

}

以上所有代码加起来,就仅仅是一个蓝色的正方形....
 

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值