如何在Cesium中使用Material.fromType

时间:2018-05-11 18:31:18

标签: cesium

我无法使用Cesium.Material.fromType功能创建使用类型和制服的材料。

我指的是这里的文档:link

我有以下示例我试图开始工作,但是我想接下来使用Dot动态类型而不是颜色。目前颜色似乎更容易。

Sandcastle example

这有效: material : Cesium.Color.GREEN

这不是:

material : Cesium.Material.fromType('Color', {
  color : new Cesium.Color(1.0, 0.0, 0.0, 1.0)
})

我收到了这个错误:
Uncaught DeveloperError: Unable to infer material type: [object Object]

似乎实体上的材质属性不能成为对象,我是否错过了将材质转换为基本类型的步骤?

1 个答案:

答案 0 :(得分:3)

所以我这里没有好消息,但我至少可以解释什么是错的。如您所知,Cesium有两个独立的API层,“实体”层(用于移动车辆等复杂对象)和“原始”层(用于图形基元,如广告牌或网格集合)。你在这里做的是直接从原始图层构建一个材质并尝试将它分配给一个实体,这将无法工作。

在Entity图层,材质由派生自MaterialProperty的抽象基类的类描述。派生类是该doc链接中列出的所有实体层类,例如,有纯色的ColorMaterialProperty类。在实体层使这些事物变得时间动态,例如,当模拟时间为04:00时,您的纯色可能是蓝色,而06:00时更改为红色等。原始材料没有结合时间的概念,并且重量轻得多。

现在是坏消息:Cesium目前似乎没有DotMaterialProperty类。这意味着Dot材质仅存在于原始层API,并且未连接到实体层。此时团队喜欢说“欢迎贡献”,如果你这么倾向,你可以通过复制StripeMaterialPropertyGridMaterialProperty并编辑它来连接Dot来解决这个问题。 / p>

但是在短期内,如果您需要的Dot材料超过了您需要的实体层,您可以将代码转换为图形基元。您可以在Procedural Textures下拉框下的Material Sandcastle Demo找到示例代码。