Cesium:矩形实体上的自定义材质

时间:2015-11-30 15:14:16

标签: cesium

我正在尝试添加一个实体,它具有多种不同的属性,例如材质(主要是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

1 个答案:

答案 0 :(得分:2)

汉娜在论坛上回答了这个问题。我将在下面复制她的答案,但首先我会添加自己的注释,说明为什么MaterialPropertyMaterial不同。

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
        }),
    }
});