javascript - WebGL 在线条上添加发光效果

标签 javascript webgl vivagraphjs

我想在 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;

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

最佳答案

发光几乎总是一种后处理效果。您可以通过将 Canvas 大小的纹理附加到帧缓冲区来将场景绘制到纹理中。然后,您可以应用另一个着色器将该纹理渲染到 Canvas 上,该着色器可以实现一些效果,例如发光。

换句话说,您不能仅通过修改片段着色器来向上面的示例添加发光效果。您需要另一组着色器

关于javascript - WebGL 在线条上添加发光效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25993742/

相关文章:

javascript - WebGL 片段着色器不透明度

javascript - 如何绘制箭头以通过 ngraph.pixi 与 PIXI.js 与 webgl 链接?

javascript - 使用 jquery 检查 Bootstrap 设置单选按钮

javascript - 无法确定任务 ':react-native-onesignal:compileDebugAidl' 的依赖关系

javascript - 请求头字段不允许授权(AngularJS Rest api 请求)

javascript - SomeArray.sort ( function() { ... } ) 语句背后的逻辑是什么?

javascript - WebGL,gl 矩阵。如何从相机 View 和投影矩阵中获取平截头体顶点?

javascript - 我怎样才能在 three.js 中做一个以液体方式移动的 2D 变形圆圈?

javascript - 如何获取或设置节点的 x, y 位置