Материал цезия игнорируется на полигоне

Я пытаюсь установить цвет многоугольника, используя свойство материала, например:

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, многоугольник отображается красным цветом, как и ожидалось.

Помощь очень ценится!


person serlingpa    schedule 13.12.2017    source источник


Ответы (1)


Здесь используются два разных API. После создания Entity вы можете редактировать существующий Материал, устанавливая цветовые униформы и тому подобное. Но до того, как объект существует, поля, которые вы используете, предназначены для параметров создания объекта, а не для ранее существовавшего объекта.

Итак, глядя на документ 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 );
}
person emackey    schedule 13.12.2017
comment
Я пробовал, но теперь полигон получается черным! Независимо от того, какие аргументы я передаю конструктору Color - person serlingpa; 13.12.2017
comment
Да, получилось. Я использовал диапазон 0-255, чтобы указать значение для каждого канала, а не 0-1. Где я могу узнать больше о различиях между двумя API, о материалах и прочем? Не совсем понял ваше объяснение вещей до и после создания сущности. - person serlingpa; 13.12.2017
comment
Сравните, что entityObject в вашем коде выше, с тем, что this.cesiumEntity становится внизу. Последний представляет собой сконструированный instanceof Cesuim.Entity, а первый — просто гигантский объект параметров, передаваемый для построения. Конструкция происходит неявно в вызове entities.add внизу этого кода. Cesium предпочитает создавать их самостоятельно, а не вызывать new Entity вручную, но все параметры конструктора, показанные в документации, — это то, что add передает в новый объект. - person emackey; 13.12.2017