【问题标题】:WebGL add glow effect on linesWebGL 在线条上添加发光效果
【发布时间】:2014-09-23 11:18:48
【问题描述】:

我想在 webgl 中的图形线上添加发光效果,例如 the Interactive Globe: Small Arms Imports & Exports

我使用库 Vivagraph.js 来显示节点和链接,而不是 Threejs。

片段着色器:

precision mediump float;
varying vec4 color;
void main(void) {
    gl_FragColor = color;
}

顶点着色器:

attribute vec2 a_vertexPos;
attribute vec4 a_color;
uniform vec2 u_screenSize;
uniform mat4 u_transform;
varying vec4 color;
void main(void) {
    gl_Position = u_transform * vec4(a_vertexPos/u_screenSize, 0.0, 1.0);
    color = a_color.abgr;
}

渲染函数:

gl.useProgram(program);
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, storage, gl.DYNAMIC_DRAW);

if (sizeDirty) {
    sizeDirty = false;
    gl.uniformMatrix4fv(locations.transform, false, transform);
    gl.uniform2f(locations.screenSize, width, height);
}

gl.vertexAttribPointer(locations.vertexPos, 2, gl.FLOAT, false, 3 * Float32Array.BYTES_PER_ELEMENT, 0);
gl.vertexAttribPointer(locations.color, 4, gl.UNSIGNED_BYTE, true, 3 * Float32Array.BYTES_PER_ELEMENT, 2 * 4);
gl.drawArrays(gl.LINES, 0, linksCount * 2);
frontLinkId = linksCount - 1;

你有什么想法在片段着色器上添加​​有关发光的信息吗? 谢谢

【问题讨论】:

    标签: javascript webgl vivagraphjs


    【解决方案1】:

    发光几乎总是一种后期处理效果。通过将画布大小的纹理附加到帧缓冲区,您可以将场景绘制到纹理中。然后,应用另一个着色器将该纹理渲染到画布上,该着色器会产生一些类似发光的效果。

    换句话说,您不能只通过修改片段着色器来为上面的示例添加光晕。你需要另一套着色器

    【讨论】:

      猜你喜欢
      • 2016-07-15
      • 1970-01-01
      • 2017-03-14
      • 2010-11-30
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多