【问题标题】:Cesium material being ignored on polygon铯材料在多边形上被忽略
【发布时间】:2017-12-13 22:32:49
【问题描述】:

我正在尝试使用材质属性设置多边形的颜色,如下所示:

drawOnMap() {
  let material = Cesium.Material.fromType('Color');
  material.uniforms.color = new Cesium.Color(1.0, 1.0, 0.0, 1.0);

  const entityObject = {
    polygon: {
      hierarchy: this.positions !== undefined ? this.positions : undefined,
      height: 0,
      material: material, 
    }
  };

  return this.cesiumEntity = this.cesiumViewerService.getViewer().entities.add( entityObject );
}

我尝试了各种组合来创建材质,但它们都被忽略了,多边形被渲染为白色。我错过了什么?

请注意,如果我使用Cesium.Color.RED,多边形会按预期呈现为红色。

帮助不胜感激!

【问题讨论】:

    标签: angular cesium


    【解决方案1】:

    您在这里使用了两种不同的 API。创建实体后,您可以通过设置颜色统一等来编辑现有材质。但是,在实体存在之前,您使用的字段用于实体创建选项,而不是用于预先存在的实体。

    所以查看Entity 文档,我们可以看到一个选项polygon 采用PolygonGraphics,其中有一个字段material 采用MaterialProperty(不是构造材料!),即一个有几个实现的抽象类,其中一个是ColorMaterialProperty

    那么,试试这个:

    drawOnMap() {
      let materialProperty = new Cesium.ColorMaterialProperty(
          new Cesium.Color(1.0, 1.0, 0.0, 1.0)
      );
    
      const entityObject = {
        polygon: {
          hierarchy: this.positions !== undefined ? this.positions : undefined,
          height: 0,
          material: materialProperty
        }
      };
    
      return this.cesiumEntity = this.cesiumViewerService.getViewer().entities.add( entityObject );
    }
    

    【讨论】:

    • 我试过了,但现在多边形变黑了!无论我将什么参数传递给Color 构造函数
    • 是的,解决了。我使用 0-255 范围来指定每个通道的值,而不是 0-1。我在哪里可以找到更多关于这两个 API 之间的差异,以及关于材料和所有这些东西的信息?不太明白您对实体创建前后的内容的解释。
    • 比较上面代码中的entityObject与底部的this.cesiumEntity。后者是一个构造的instanceof Cesuim.Entity,但前者只是一个巨大的选项对象被传入用于构造。构造隐式发生在此代码底部的 entities.add 调用中。 Cesium 更喜欢自己构建它们,而不是让您手动调用 new Entity,但文档中显示的所有构造函数选项都是 add 传递给新实体的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2015-02-03
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多