如何使用 gl.lineWidth()

Mot*_*Mot 2 javascript graphics webgl

其他一切都在顺利进行,并且正在绘制线条。它似乎只是忽略了 gl.lineWidth() 调用。还有什么我需要做的吗?

    gl.lineWidth(17);
    gl.drawArrays(this.drawMode,0,totalVertices);
Run Code Online (Sandbox Code Playgroud)

我有没有可能过度简化事情?它可能需要知道我为哪条线指定了宽度?

gma*_*man 6

需要注意的gl.lineWidth是,根据 WebGL 规范,不能保证使用1.0 以外的任何宽度都能正常工作。WebGL 基于 OpenGL ES 2.0(WebGL2 基于 OpenGL ES 3.0)。OpenGL ES 3.0 规范

第 3.5 节

支持的最大线宽必须至少为 1。

或者换句话说,不需要支持宽度 > 1.0。OpenGL ES 2.0 / WebGL1 也是如此

要找出您应该调用的行支持的最小和最大宽度,该行gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE)返回一个包含 2 个数字的数组。第一个数字是支持的最小宽度,第二个数字是支持的最大宽度。两者都允许为 1.0

因此,您真的不应该使用,gl.lineWidth因为您的用户可能无法获得 1.0 以外的任何宽度。

也就是说,有一段时间,一些实现支持线宽 > 1.0。这在 2017 年 1 月 WebGL2 发布时发生了很大变化。WebGL2,至少在 Mac 和 Linux 上是在 OpenGL 3.3 的核心配置文件之上实现的。来自OpenGL 规范核心配置文件规范附录 E

E.2.1 已弃用但仍受支持的功能

以下功能已弃用,但仍存在于核心配置文件中。它们可能会从 OpenGL 的未来版本中删除并在实现核心配置文件的前向兼容上下文中删除。

  • 宽线 - LineWidth 值大于 1.0 将生成 INVALID_VALUE 错误。

浏览器不会从 OpenGL 规范生成错误,因为 OpenGL ES 规范不需要错误,但限制仍然存在,因为底层驱动程序不支持它们。

如果要绘制大于 1的线条,则需要自己对线条进行光栅化