美文网首页程序员
WebGL 探秘 (3)

WebGL 探秘 (3)

作者: zidea | 来源:发表于2019-02-20 08:04 被阅读65次

这里对程序进行,之所以为什么这样校验个人暂时也不太懂,只是 copy,估计应该便于我们开发人员进行调试吧。

gl.validateProgram(shaderProgram)
if(!gl.getProgramParameter(shaderProgram,gl.VALIDATE_STATUS)){
    console.log("ERROR validating program ",gl.getProgramInfoLog(shaderProgram))
}

这里我们定义三角形的顶点坐标,我们回到看一下 attribute vec2 vertPosition; 所以我们的顶点坐标是二维的,所以每两个点定义一个坐标,然后这些坐标组成一个数组用来表示三角形,具体这里数值怎么来的,为什么是这个数值。随后分享

const triangleVertices = [
        0.0,0.5,
        -0.5,-0.5,
        0.5,-0.5
    ];

  1. 首先为三角形创建一个位置的 buffer
  2. 然后为 buffer 指定类型
  3. 然后将我们三角形的顶点坐标给定buffer类型
  • 这里有一点值得注意就是 javascript 的 triangleVertices 类型为 float64 而 webgl 需要 float32 所以我们需要转一下型
 var triangleVertexBufferObject = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexBufferObject);
    gl.bufferData(gl.ARRAY_BUFFER,
        new Float32Array(triangleVertices),
        gl.STATIC_DRAW);

这里我们定义属性这是需要传入 shader 进行计算的我们定义本地数据 vertPosition

var positionAttribLocation = gl.getAttribLocation(shaderProgram,'vertPosition')

vertexAttribPointer 这个函数接受 5 参数

  • numComponents 表示我们坐标数这里是 2
  • normalize 理解他需要一定做 3d 基础他是我们绘制面的法线,也就是垂直我们面的一条线
  • stride 这里 2 * 4
  • offset 表示数组中偏移量
 const numComponents = 2;
    const type = gl.FLOAT;
    const normalize = gl.FALSE;
    const stride = 2 * Float32Array.BYTES_PER_ELEMENT;
    const offset = 0;

    gl.vertexAttribPointer(
        positionAttribLocation,
        numComponents,
        type,
        normalize,
        stride,
        offset);

drawArrays 多半时候我们都是在绘制三角形,三角形是我们做动画的基础,有时候也会绘制点和线

 gl.enableVertexAttribArray(
        positionAttribLocation);
 gl.useProgram(shaderProgram)
    gl.drawArrays(gl.TRIANGLES,0,3)
   
007.JPG

相关文章

  • WebGL 探秘 (3)

    这里对程序进行,之所以为什么这样校验个人暂时也不太懂,只是 copy,估计应该便于我们开发人员进行调试吧。 这里我...

  • WebGL 探秘 (2)

    可能开始有些内容是重复的没为题,大家就当复习一下,我也提出一些新的内容 通过调用 canvas 的 getCont...

  • WebGL 探秘 (1)

    人类是无利不起早,有时候我们总是避讳不谈利益而谈理想和最求,但是相对这些都没有利益驱动做一件事更靠谱。要知道一个简...

  • WebGL 探秘 (F)

    网格(Mesh)、多边形 我们用过 3dMax 和 Maya 所以 对 Mesh 已经有点理解, 在 3D 软件...

  • JavaScript第十五章节 使用Canvas绘图(W

    WebGL WebGL 是针对 Canvas 的 3D 上下文。与其他 Web 技术不同,WebGL 并不是 W3...

  • Vue2+Three.js

    Three.js中文网 http://www.webgl3d.cn/[http://www.webgl3d.cn/...

  • SuperMap iClient3D for WebGL教程 轨

    SuperMap iClient3D for WebGL教程 轨迹动画(一)-Entity WuYK 在WebGL...

  • 五 WebGL

    ← Svg入门WebGL(Web Graphics Library)是一种 3D 绘图协议,WebGL可以为 HT...

  • WebGL

    1、javaScript不支持线程 2、移动端不支持webGL 3、webgl不支持filestream 4、浏览...

  • 《WebGL编程指南》1&2 WebGL入门

    什么是WebGL? WebGL是一种可以在网页上绘制渲染3D图形,并允许用户与之交互的技术。浏览器内置了WebGL...

网友评论

    本文标题:WebGL 探秘 (3)

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