我正在尝试添加一个实体,它具有多种不同的属性,例如材质(主要是alpha)和旋转。 RectangleGraphics具有旋转覆盖,并且在我将材质设置为表示纹理时起作用。
viewer.entities.add({
name: 'Site Layer',
rectangle: {
coordinates: rectangle,
material: 'Image.jpg',
rotation: Cesium.Math.toRadians(13)
}
});
但是,当我尝试使用自定义材质(使用https://github.com/AnalyticalGraphicsInc/cesium/issues/2484)来实现透明度时,它会显示为白色纹理而不是所需的结果...类似于:
material = new Cesium.Material({
fabric : {
type : 'Color',
uniforms : {
image : 'Image.jpg',
alpha : 0.5
}
components : {
diffuse : 'texture2D(image, materialInput.st).rgb',
alpha : 'texture2D(image, materialInput.st).a * alpha'
}
}
}
);
viewer.entities.add({
rectangle: {
coordinates: rectangle,
material: material,
rotation: Cesium.Math.toRadians(13)
}
});
阅读文档时,矩形中的材质似乎是Cesium.MaterialProperty而不是Cesium.Material ......这是否意味着我不能简单地将材质指定给矩形?如果没有,我可以以某种方式将材料包装在自定义MaterialProperty中以使其工作吗?
为了好奇,为什么Material和MaterialProperty之间存在功能差异?
P.S。 GroundPrimitive对我不起作用,因为我需要支持的一个主要浏览器(Safari)报告GroundPrimitives.isSupported = false
此处也发布了https://groups.google.com/forum/#!topic/cesium-dev/1IPjHD7G_NA
答案 0 :(得分:2)
汉娜在论坛上回答了这个问题。我将在下面复制她的答案,但首先我会添加自己的注释,说明为什么MaterialProperty
与Material
不同。
Property
版本与所有Cesium Entity Properties一样,旨在描述当Cesium动画时,某些内容的定义如何随时间变化。例如,MaterialProperty
可以在一个时间间隔内指示纯色,在单独的时间间隔内指示条纹材料。实际的基础Material
可能会被销毁,并且在动画期间会创建一个替换的基础。{/ p>
对于您的情况,如果您确实需要自定义材质,那么您目前最好的选择是避免使用Entity API及其时间动态属性,并直接使用带有Material
类的图形基元。但正如汉娜指出的那样,对于简单的图像alpha混合,你并不需要这样做。汉娜写道:
这应该在即将发布的版本中修复(1.16) 您可以使用此代码制作半透明图像:
var viewer = new Cesium.Viewer('cesiumContainer');
viewer.entities.add({
rectangle: {
coordinates: Cesium.Rectangle.fromDegrees(-125,30,-110,40),
material: new Cesium.ImageMaterialProperty({
image: '../images/Cesium_Logo_Color.jpg',
alpha: 0.5
}),
}
});