如何使用gl.lineWidth()

时间:2017-11-22 21:37:39

标签: javascript graphics webgl

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

    gl.lineWidth(17);
    gl.drawArrays(this.drawMode,0,totalVertices);

我有没有机会简化事情?它可能需要知道我指定宽度的哪条线?

2 个答案:

答案 0 :(得分:1)

重要的是要注意,使用宽度不是1.0的gl.lineWidth并不能保证根据WebGL规范工作。 WebGL基于OpenGL ES 2.0(WebGL2基于OpenGL ES 3.0)。 The OpenGL ES 3.0 spec

第3.5节

  

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

或者换句话说,支持宽度> 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 Spec Core Profile spec附录E

  

E.2.1不推荐但仍支持的功能

     

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

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

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

如果要绘制大于1的行,则需要rasterize the lines yourself

答案 1 :(得分:0)

  

gl.lineWidth()在常见的现代浏览器中无效。该   相应的Chromium bugFirefox bug已关闭,因为无法修复和   WebGL规范现在定义了gl.lineWidth()没有   再改变线宽。如果你需要任何宽度的线条   比1px,考虑绘制一条狭长的三角形。 - Mozilla Developer Network

因为Windows DirectX is used as WebGL backend不支持超过1像素的绘制线。