其他一切都在顺利进行,并且正在绘制线条。它似乎忽略了gl.lineWidth()调用。还有什么我需要做的吗?
gl.lineWidth(17);
gl.drawArrays(this.drawMode,0,totalVertices);
我有没有机会简化事情?它可能需要知道我指定宽度的哪条线?
答案 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 bug和Firefox bug已关闭,因为无法修复和 WebGL规范现在定义了gl.lineWidth()没有 再改变线宽。如果你需要任何宽度的线条 比1px,考虑绘制一条狭长的三角形。 - Mozilla Developer Network
因为Windows DirectX is used as WebGL backend不支持超过1像素的绘制线。