我正在尝试添加一个实体,该实体具有多种不同的属性,例如材质(主要是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 ...这是否意味着我不能简单地将材质分配给Rectangle?如果没有,我可以以某种方式将材质包装在自定义的MaterialProperty中以使其起作用吗?
出于好奇,为什么Material和MaterialProperty之间的功能有所不同?
ps GroundPrimitive不适用于我,因为我需要支持的主要浏览器之一(Safari)报告GroundPrimitives.isSupported = false
也发布在这里https://groups.google.com/forum/#!topic/cesium-dev/1IPjHD7G_NA
汉娜在论坛上回答了这个问题。我将在下面复制她的答案,但首先,我将添加自己的注释,说明为什么MaterialProperty
与有所不同Material
。
Property
与所有Cesium实体属性一样,该版本旨在描述Cesium动画时某些事物的定义如何随时间变化。例如,aMaterialProperty
可能在一个时间间隔内指示纯色,而在单独的时间间隔内指示条纹的材料。因此,Material
可能破坏实际的基础,并在动画过程中创建替代对象。
对于您的情况,如果您确实需要定制的Material,那么当前最好的选择是避免使用Entity API及其时间动态属性,而Material
直接在类中使用图形基元即可。但是正如汉娜(Hannah)所指出的,您不需要简单的图像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
}),
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句