我是按照沙堡椭圆轮廓几何学来做的。 我想知道是否有办法让椭圆线的宽度变宽? 有一些使用宽度属性使多条线变宽的例子,但似乎没有办法使椭圆OutlineGeometry对象变宽。沙堡的例子在最后有一个lineWidth设置,但对这个设置的改变似乎并不影响椭圆轮廓的宽度。
沙盒代码。
// Create the ellipse geometry. To extrude, specify the
// height of the geometry with the extrudedHeight option.
// The numberOfVerticalLines option can be used to specify
// the number of lines connecting the top and bottom of the
// ellipse.
ellipseOutlineGeometry = new Cesium.EllipseOutlineGeometry({
center : Cesium.Cartesian3.fromDegrees(-95.0, 35.0),
semiMinorAxis : 200000.0,
semiMajorAxis : 300000.0,
extrudedHeight : 150000.0,
rotation : Cesium.Math.toRadians(45),
numberOfVerticalLines: 10
});
// Create a geometry instance using the ellipse geometry
// created above.
var extrudedEllipseOutlineInstance = new Cesium.GeometryInstance({
geometry : ellipseOutlineGeometry,
attributes : {
color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.WHITE)
}
});
// Add both ellipse outline instances to primitives.
primitives.add(new Cesium.Primitive({
geometryInstances : [ellipseOutlineInstance, extrudedEllipseOutlineInstance],
appearance : new Cesium.PerInstanceColorAppearance({
flat : true,
renderState : {
depthTest : {
enabled : true
},
lineWidth : Math.min(2.0, scene.maximumAliasedLineWidth) //changes here dont seem to affect the actual size?
}
})
}));
我假设你使用的是Windows系统(你马上就会知道为什么)。
简单的答案,为什么 scene.maximumAliasedLineWidth
总是返回1是因为那是你的网络浏览器允许的最大值。 这也是为什么当您使用大于1的值时,会出现错误的原因。 当然,这个答案只会引出更多的问题;所以这里有一个更详细的回答。
WebGL规范规定,实现支持的最小线宽为1;而没有要求支持大于1的线宽。在实践中,所有的OpenGL驱动程序都支持大于1的值;我相信您目前使用的硬件也是如此。 然而,Windows上所有主要的WebGL实现实际上都没有使用OpenGL。
Chrome和Firefox都使用了一个名为 ANGLE (几乎原生图形层引擎) 通过DirectX在Windows上实现WebGL。ANGLE本身被认为是一个符合标准的实现。 由于ANGLE选择只支持1的线宽(我不会去解释为什么);这意味着Chrome和Firefox都无法在Windows上绘制更宽的线条(在这个过程中会让你和许多其他开发者疯狂)。
Internet Explorer 11采用了类似的方法,不过他们没有使用ANGLE,而是有自己的基于DirectX的自定义实现。 更糟糕的是,虽然他们只宣称支持1的线宽,但浏览器本身总是绘制粗线(看起来在3-5像素宽之间)。 所以在IE中,不可能没有粗线。
在其他平台上的实现;无论是Android、iOS还是Mac OS,都不存在这个问题。 你的原代码片段在这些平台上会画出粗细为2的线条,在Windows上则为1。
一个方便的网站可以了解你的浏览器所使用的WebGL实现情况。http:/webglreport.com. 它可以告诉你,如果你使用的是ANGLE,你的许多功能的最小值和最大值是什么,以及无数的其他信息(如果你是一个图形程序员,你可能只关心)。
我在Windows上使用Firefox。我去了 http:/webglreport.com 并确认了这些值。但我在渲染线条较粗的多边形(MultiGeometry)时没有任何问题。问题只出在多边形上。
上面的答案是旧的。
从2017年初开始,Chrome和Firefox都运载了WebGL2。为了支持WebGL2,他们必须使用OpenGL 3.3 "核心 "配置文件或更高版本。"核心 "配置文件中这样写道
E.2.1 废弃的...... 特性
- 宽线--LineWidth值大于1.0时,会产生一个 "宽线"。
INVALID_VALUE
错误。
如果你只用WebGL1确实没关系,浏览器下面还是用同样的系统。
换句话说,在大多数情况下,自2017年以来,桌面上根本很少支持粗线条。OpenGL ES规范没有这条线,所以你有可能在Android和iOS以及类似的设备上获得粗线条,但基本上你应该认为你不能
为了得到粗线条,你需要 由三角形生成