Open SyMind opened 2 years ago
原文:https://mattdesl.svbtle.com/drawing-lines-is-hard
在 OpenGL,尤其是在 WebGL,要画好线条是非常困难的。在这里,我探索了一些不同的 2D 和3D 线条渲染技术,每个都带有一个小例子。
例子的源码在这里:https://github.com/mattdesl/webgl-lines
WebGL 包含这些线段 gl.LINES、gl.LINE_STRIP 和 gl.LINE_LOOP。听起来不错是么?但并不是。这里有一些问题:
gl.LINES
gl.LINE_STRIP
gl.LINE_LOOP
glLineStipple
一种常见方法是将一条线拆分为由三角形组成的条带,这使得可以最大程度地控制直线。
它的一种典型实现方法是获取路径上每个点的法线,并在两侧向外扩展一半厚度。
有以下选择进行反走样:
上一个方案对于 2D 线条效果很好,但可能不适合在 3D 空间中的设计需求。
在 OpenGL,尤其是在 WebGL,要画好线条是非常困难的。在这里,我探索了一些不同的 2D 和3D 线条渲染技术,每个都带有一个小例子。
例子的源码在这里:https://github.com/mattdesl/webgl-lines
Line 基原
WebGL 包含这些线段
gl.LINES
、gl.LINE_STRIP
和gl.LINE_LOOP
。听起来不错是么?但并不是。这里有一些问题:glLineStipple
已被弃用,在 WebGL 中不存在。三角剖分线条
一种常见方法是将一条线拆分为由三角形组成的条带,这使得可以最大程度地控制直线。
它的一种典型实现方法是获取路径上每个点的法线,并在两侧向外扩展一半厚度。
有以下选择进行反走样:
gl.LINES
围绕线条边缘渲染第二遍。扩展定点着色器
屏幕空间投影线
上一个方案对于 2D 线条效果很好,但可能不适合在 3D 空间中的设计需求。