Model

internal constructor new Cesium.Model()

要构建 Model,请调用 Model.fromGltfAsync。不要直接调用构造函数。
基于 glTF(WebGL、OpenGL ES 和 OpenGL 的运行时资产格式)的 3D 模型。

Cesium 支持带有以下扩展的 glTF 资产:

注意:对于使用 KHR_texture_basisu 扩展压缩纹理的模型,我们建议在两个维度上使用 2 的幂次方的纹理,以获得最大的兼容性。这是因为某些采样器需要 2 的幂次方的纹理(在 WebGL 中使用纹理),并且 KHR_texture_basisu 需要 4 的倍数维度(KHR_texture_basisu 附加要求)。

Demo:
See:

Members

当前正在播放的 glTF 动画。

backFaceCulling : boolean

是否剔除背面几何体。当为 true 时,背面剔除由 材质的 doubleSided 属性决定;当为 false 时,背面 剔除被禁用。如果 Model#color 是半透明的或 Model#silhouetteSize 大于 0.0,则背面不会被剔除。
Default Value: true
获取模型在世界空间中的包围球。这不考虑 glTF 动画、骨骼或变形目标,也不考虑 Model#minimumPixelSize.

clampAnimations : boolean

确定模型的动画是否应在未指定关键帧的帧上保持姿势。
Default Value: true
获取模型的分类类型。这决定地形、 3D Tiles 或两者中哪些将被此模型分类。

此外,还有一些要求/限制:

  • glTF 不能包含变形目标、骨骼或动画。
  • glTF 不能包含 EXT_mesh_gpu_instancing 扩展。
  • 只有具有 TRIANGLES 的网格可用于对其他资产进行分类。
  • 网格必须是水密的(无缝隙)。
  • 需要 POSITION 属性。
  • 如果同时存在特征 ID 和索引缓冲区,则具有相同特征 ID 的所有索引必须占据索引缓冲区的连续部分。
  • 如果存在特征 ID 但没有索引缓冲区,则具有相同特征 ID 的所有位置必须占据位置缓冲区的连续部分。

接收分类的 3D Tiles 或地形必须是不透明的。

Default Value: undefined
Experimental

此功能使用的 3D Tiles 规范部分尚未定稿,可能会更改,且无需遵循 Cesium 的标准弃用策略。

用于选择性地禁用模型渲染的 ClippingPlaneCollection
用于选择性地禁用模型渲染的 ClippingPolygonCollection
与模型渲染颜色混合的颜色。
Default Value: undefined

colorBlendAmount : number

colorBlendModeMIX 时用于确定颜色强度的值。值为 0.0 时结果为模型的渲染颜色,值为 1.0 时结果为纯色,中间的任何值则为两者的混合。
Default Value: 0.5
定义颜色如何与模型混合。
Default Value: ColorBlendMode.HIGHLIGHT
获取将为模型显示的署名。
模型的自定义着色器(如果存在)。将自定义着色器与 Cesium3DTileStyle 一起使用 可能会导致未定义的行为。
Experimental

此功能使用的 3D Tiles 规范部分尚未定稿,可能会更改,且无需遵循 Cesium 的标准弃用策略。

debugShowBoundingVolume : boolean

仅用于调试;不用于生产环境且未进行优化。

绘制模型中每个绘制命令的包围球。

Default Value: false

debugWireframe : boolean

此属性仅用于调试;不用于生产环境且未进行优化。

以线框模式绘制模型。

Default Value: false
获取或设置距离显示条件,指定在距离相机多远距离显示此模型。
Default Value: undefined

enableVerticalExaggeration : boolean

如果为 true,当 Scene.verticalExaggeration 设置为 1.0 以外的值时,模型会沿椭球法线方向夸张。
Default Value: true
Example:
// 将地形夸张 2 倍,但防止模型夸张
scene.verticalExaggeration = 2.0;
model.enableVerticalExaggeration = false;
用于管理此模型动态环境贴图的属性。影响光照。
Example:
// 将用于模型环境贴图的地面颜色更改为森林绿
const environmentMapManager = model.environmentMapManager;
environmentMapManager.groundColor = Cesium.Color.fromCssColorString("#203b34");
获取当模型遇到异步渲染错误时引发的事件。通过订阅 该事件,您将收到错误通知并有可能从中恢复。事件监听器 将接收到 ModelError 的实例。

featureIdLabel : string

用于拾取和样式的特征 ID 集的标签。

对于 EXT_mesh_features,这是特征 ID 的 label 属性,如果未 指定,则为 "featureId_N"(其中 N 是 featureIds 数组中的索引)。EXT_feature_metadata 没有 label 字段,因此此类 特征 ID 集始终标记为 "featureId_N",其中 N 是所有特征 ID 列表中的索引,特征 ID 属性列在特征 ID 纹理之前。

如果 featureIdLabel 设置为整数 N,它将自动转换为 字符串 "featureId_N"。如果同时存在每个图元和每个实例的 特征 ID,则实例特征 ID 优先。

Experimental

此功能使用的 3D Tiles 规范部分尚未定稿,可能会更改,且无需遵循 Cesium 的标准弃用策略。

模型的高度参考,决定模型相对于地形的绘制方式。
Default Value: {HeightReference.NONE}
拾取模型时返回的用户定义对象。
Default Value: undefined
See:
用于管理此模型基于图像的光照的属性。

instanceFeatureIdLabel : string

用于拾取和样式的实例特征 ID 集的标签。

如果 instanceFeatureIdLabel 设置为整数 N,它将自动转换为 字符串 "instanceFeatureId_N"。 如果同时存在每个图元和每个实例的特征 ID,则实例特征 ID 优先。

Experimental

此功能使用的 3D Tiles 规范部分尚未定稿,可能会更改,且无需遵循 Cesium 的标准弃用策略。

为模型着色时的方向光颜色。当为 undefined 时,将使用场景的光照颜色。

通过设置 model.imageBasedLighting.imageBasedLightingFactor = new Cartesian2(0.0, 0.0) 禁用其他光源会使模型变暗很多。此时,增加光源的强度会使模型变亮。

Default Value: undefined
模型的最大缩放尺寸。这可用于为 Model#minimumPixelSize 设置上限,确保模型 永远不会处于不合理的缩放比例。

minimumPixelSize : number

无论缩放级别如何,模型的近似最小像素大小。 这可用于确保即使在查看器 缩小放大时模型也可见。当为 0.0 时,不强制执行最小大小。
Default Value: 0.0
将模型从模型坐标变换到世界坐标的 4x4 变换矩阵。 当此矩阵为单位矩阵时,模型在世界坐标(即地球的笛卡尔 WGS84 坐标)中绘制。 可以通过提供不同的变换矩阵来使用局部参考系,例如由 Transforms.eastNorthUpToFixedFrame 返回的矩阵。
Default Value: Matrix4.IDENTITY
Example:
const origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);
m.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin);
渲染轮廓时使用的颜色。
Default Value: Color.BLACK
用于控制点云衰减 和光照的点云着色设置。对于 3D Tiles,这是继承自 Cesium3DTileset 的。

readonly ready : boolean

true 时,此模型已准备好渲染,即外部二进制文件、图像 和着色器文件已下载,并且 WebGL 资源已创建。
Default Value: false
获取当模型加载完毕并准备好渲染时引发的事件,即外部资源 已下载且 WebGL 资源已创建时。事件监听器 将接收到 Model 的实例。

如果 Model.incrementallyLoadTextures 为 true,此事件将在所有纹理加载完毕并准备好渲染之前引发。订阅 Model.texturesReadyEvent 以在纹理准备好时收到通知。

应用于此模型的统一缩放比例,在 Model#modelMatrix 之前应用。 大于 1.0 的值会增加模型大小;小于 1.0 的值会减小。
Default Value: 1.0
确定模型是投射阴影还是从光源接收阴影。
Default Value: ShadowMode.ENABLED
是否渲染模型。
Default Value: true

showCreditsOnScreen : boolean

获取或设置是否在屏幕上显示模型的署名。
Default Value: false
是否显示使用 CESIUM_primitive_outline 扩展的模型的轮廓。 为 true 时,显示轮廓。为 false 时,不显示轮廓。
Default Value: true
轮廓颜色。
Default Value: Color.RED

silhouetteSize : number

轮廓大小(以像素为单位)。
Default Value: 0.0
应用于此模型的 SplitDirection
Default Value: SplitDirection.NONE
应用于模型中特征的样式。如果同时应用了 CustomShader,则无法应用此样式。

readonly texturesReadyEvent : Event

获取一个事件,如果 Model.incrementallyLoadTextures 为 true,当模型纹理加载完毕并准备好渲染时,即外部资源 已下载且 WebGL 资源已创建时,会引发该事件。事件监听器 将接收到 Model 的实例。

Methods

static Cesium.Model.fromGltfAsync(options)Promise.<Model>

从 glTF 资产异步创建模型。此函数返回一个 promise,当模型准备好渲染时(即外部二进制文件、图像 和着色器文件已下载且 WebGL 资源已创建时)该 promise 会resolved。

该模型可以是具有 .gltf 扩展名的传统 glTF 资产,也可以是使用 .glb 扩展名的二进制 glTF。

Name Type Description
options object 具有以下属性的对象:
Name Type Default Description
url string | Resource .gltf 或 .glb 文件的 url。
basePath string | Resource '' optional glTF JSON 中路径的相对基础路径。
show boolean true optional 是否渲染模型。
modelMatrix Matrix4 Matrix4.IDENTITY optional 将模型从模型坐标变换到世界坐标的 4x4 变换矩阵。
scale number 1.0 optional 应用于此模型的统一缩放比例。
enableVerticalExaggeration boolean true optional 如果为 true,当 Scene.verticalExaggeration 设置为 1.0 以外的值时,模型会沿椭球法线方向夸张。
minimumPixelSize number 0.0 optional 无论缩放级别如何,模型的近似最小像素大小。
maximumScale number optional 模型的最大缩放尺寸。minimumPixelSize 的上限。
id object optional 使用 Scene#pick 拾取模型时返回的用户定义对象。
allowPicking boolean true optional 当为 true 时,每个图元都可使用 Scene#pick 拾取。
incrementallyLoadTextures boolean true optional 确定模型加载后纹理是否可以继续流式传输。
asynchronous boolean true optional 确定模型 WebGL 资源创建是分散在几帧内还是阻塞直到所有 glTF 文件加载完成后完成。
clampAnimations boolean true optional 确定模型的动画是否应在未指定关键帧的帧上保持姿势。
shadows ShadowMode ShadowMode.ENABLED optional 确定模型是投射阴影还是从光源接收阴影。
releaseGltfJson boolean false optional 当为 true 时,加载 glTF 后会释放 glTF JSON。这对于 3D Tiles 等情况特别有用,因为每个 .gltf 模型都是唯一的,缓存 glTF JSON 无效。
debugShowBoundingVolume boolean false optional 仅用于调试。绘制模型中每个绘制命令的包围球。
enableDebugWireframe boolean false optional 仅用于调试。必须设置为 true 才能使 debugWireframe 在 WebGL1 中工作。这不能在模型加载后设置。
debugWireframe boolean false optional 仅用于调试。以线框模式绘制模型。仅当 enableDebugWireframe 设置为 true 时才在 WebGL1 中工作。
cull boolean true optional 是否使用视锥/地平线裁剪来裁剪模型。如果模型是 3D Tiles 瓦片集的一部分,则此属性始终为 false,因为使用的是 3D Tiles 裁剪系统。
opaquePass boolean Pass.OPAQUE optionalDrawCommand 中用于模型不透明部分的通道。
upAxis Axis Axis.Y optional glTF 模型的向上轴。
forwardAxis Axis Axis.Z optional glTF 模型的前向轴。
customShader CustomShader optional 自定义着色器。这会将用户定义的 GLSL 代码添加到顶点和片段着色器中。将自定义着色器与 Cesium3DTileStyle 一起使用可能会导致未定义的行为。
content Cesium3DTileContent optional 模型所属的瓦片内容。如果模型不是作为瓦片集的一部分加载的,则此属性将为 undefined。
heightReference HeightReference HeightReference.NONE optional 确定模型相对于地形的绘制方式。
scene Scene optional 对于使用高度参考属性的模型必须传入。
distanceDisplayCondition DistanceDisplayCondition optional 指定在距离相机多远距离显示此模型的条件。
color Color optional 与模型渲染颜色混合的颜色。
colorBlendMode ColorBlendMode ColorBlendMode.HIGHLIGHT optional 定义颜色如何与模型混合。
colorBlendAmount number 0.5 optionalcolorBlendModeMIX 时用于确定颜色强度的值。值为 0.0 时结果为模型的渲染颜色,值为 1.0 时结果为纯色,中间的任何值则为两者的混合。
silhouetteColor Color Color.RED optional 轮廓颜色。如果超过 256 个模型启用了轮廓,则重叠的模型有极小的几率出现轻微瑕疵。
silhouetteSize number 0.0 optional 轮廓大小(以像素为单位)。
enableShowOutline boolean true optional 是否对使用 CESIUM_primitive_outline 扩展的模型启用轮廓。可以设置为 false 以避免在加载时进行几何体的后处理。当为 false 时,showOutlines 和 outlineColor 选项将被忽略。
showOutline boolean true optional 是否显示使用 CESIUM_primitive_outline 扩展的模型的轮廓。为 true 时,显示轮廓。为 false 时,不显示轮廓。
outlineColor Color Color.BLACK optional 渲染轮廓时使用的颜色。
clippingPlanes ClippingPlaneCollection optional 用于选择性地禁用模型渲染的 ClippingPlaneCollection
clippingPolygons ClippingPolygonCollection optional 用于选择性地禁用模型渲染的 ClippingPolygonCollection
lightColor Cartesian3 optional 为模型着色时的光照颜色。当为 undefined 时,将使用场景的光照颜色。
imageBasedLighting ImageBasedLighting optional 用于管理此模型基于图像的光照的属性。
environmentMapOptions DynamicEnvironmentMapManager.ConstructorOptions optional 用于管理此模型动态环境贴图的属性。
backFaceCulling boolean true optional 是否剔除背面几何体。当为 true 时,背面剔除由材质的 doubleSided 属性决定;当为 false 时,背面剔除被禁用。如果模型的颜色是半透明的,则背面不会被剔除。
credit Credit | string optional 数据源的署名,将显示在画布上。
showCreditsOnScreen boolean false optional 是否在屏幕上显示此模型的署名。
splitDirection SplitDirection SplitDirection.NONE optional 应用于此模型的 SplitDirection 分割。
projectTo2D boolean false optional 是否准确地在 2D 中投影模型的位置。如果为 true,模型将准确地投影到 2D,但会使用更多内存。如果为 false,模型将使用更少的内存并仍将在 2D / CV 模式下渲染,但其位置可能不准确。这会禁用 minimumPixelSize 并防止将来修改模型矩阵。这也不能在模型加载后设置。
enablePick boolean false optional 在不使用 WebGL 2 或更高版本时,是否允许使用 pick 进行 CPU 拾取。如果使用 WebGL 2 或更高版本,此选项将被忽略。如果使用 WebGL 1 且此为 true,pick 操作将正常工作,但会使用更多内存。如果在 WebGL 1 下运行且此为 false,模型将使用更少的内存,但 pick 将始终返回 undefined。这不能在模型加载后设置。
featureIdLabel string | number "featureId_0" optional 用于拾取和样式的特征 ID 集的标签。对于 EXT_mesh_features,这是特征 ID 的 label 属性,如果未指定,则为 "featureId_N"(其中 N 是 featureIds 数组中的索引)。EXT_feature_metadata 没有 label 字段,因此此类特征 ID 集始终标记为 "featureId_N",其中 N 是所有特征 ID 列表中的索引,特征 ID 属性列在特征 ID 纹理之前。如果 featureIdLabel 是整数 N,它将自动转换为字符串 "featureId_N"。如果同时存在每个图元和每个实例的特征 ID,则实例特征 ID 优先。
instanceFeatureIdLabel string | number "instanceFeatureId_0" optional 用于拾取和样式的实例特征 ID 集的标签。如果 instanceFeatureIdLabel 设置为整数 N,它将自动转换为字符串 "instanceFeatureId_N"。如果同时存在每个图元和每个实例的特征 ID,则实例特征 ID 优先。
pointCloudShading object optional 用于构造 PointCloudShading 对象的选项,以基于几何误差和光照控制点衰减。
classificationType ClassificationType optional 确定地形、3D Tiles 或两者中哪些将被此模型分类。这不能在模型加载后设置。
gltfCallback Model.GltfCallback optional 加载完成后使用加载的 gltf 对象调用的函数。
Returns:
当模型准备好渲染时 resolves 到所创建模型的 promise。
Throws:
Examples:
// 加载模型并将其添加到场景中
try {
 const model = await Cesium.Model.fromGltfAsync({
   url: "../../SampleData/models/CesiumMan/Cesium_Man.glb"
 });
 viewer.scene.primitives.add(model);
} catch (error) {
 console.log(`加载模型失败。${error}`);
}
// 使用 modelMatrix 定位模型并以 128 像素的最小尺寸显示它
const position = Cesium.Cartesian3.fromDegrees(
  -123.0744619,
  44.0503706,
  5000.0
);
const headingPositionRoll = new Cesium.HeadingPitchRoll();
const fixedFrameTransform = Cesium.Transforms.localFrameToFixedFrameGenerator(
  "north",
  "west"
);
try {
 const model = await Cesium.Model.fromGltfAsync({
   url: "../../SampleData/models/CesiumAir/Cesium_Air.glb",
   modelMatrix: Cesium.Transforms.headingPitchRollToFixedFrame(
     position,
     headingPositionRoll,
     Cesium.Ellipsoid.WGS84,
     fixedFrameTransform
   ),
   minimumPixelSize: 128,
 });
 viewer.scene.primitives.add(model);
} catch (error) {
 console.log(`加载模型失败。${error}`);
}
// 加载模型并以半速播放最后一个动画
let animations;
try {
 const model = await Cesium.Model.fromGltfAsync({
   url: "../../SampleData/models/CesiumMan/Cesium_Man.glb",
   gltfCallback: gltf => {
     animations = gltf.animations
   }
 });
 viewer.scene.primitives.add(model);
 model.readyEvent.addEventListener(() => {
   model.activeAnimations.add({
     index: animations.length - 1,
     loop: Cesium.ModelAnimationLoop.REPEAT,
     multiplier: 0.5,
   });
 });
} catch (error) {
 console.log(`加载模型失败。${error}`);
}
将任何修改后的铰接阶段应用于参与任何铰接的每个节点的矩阵。请注意,这将覆盖参与节点上的任何节点变换。
Throws:
  • DeveloperError : 模型未加载。请使用 Model.readyEvent 或等待 Model.ready 为 true。
销毁此对象持有的 WebGL 资源。销毁对象可以确定性 地释放 WebGL 资源,而不是依赖垃圾回收器来销毁此对象。

对象一旦销毁,就不应再使用;调用除 isDestroyed 之外的任何函数都会导致 DeveloperError 异常。因此, 如示例所示,将返回值(undefined)赋给该对象。
Throws:
Example:
model = model && model.destroy();
See:
  • Model#isDestroyed

getExtension(extensionName)object|undefined

返回为给定扩展创建的对象。 给定的名称可以是 glTF 扩展的名称,例如 `"EXT_example_extension"`。 如果指定的扩展存在于底层 glTF 资产的根目录中, 并且已处理该扩展数据的加载器已处理该扩展数据,则 这将返回该扩展的模型表示。
Name Type Description
extensionName string 扩展的名称
Returns:
该对象,或 `undefined`
Throws:
  • DeveloperError : 模型未加载。请使用 Model.readyEvent 或等待 Model.ready 为 true。
Experimental

此功能尚未定稿,可能会更改,且无需遵循 Cesium 的标准弃用策略。

Returns the node with the given name in the glTF. This is used to modify a node's transform for user-defined animation.
Name Type Description
name string The name of the node in the glTF.
Returns:
The node, or undefined if no node with the name exists.
Throws:
  • DeveloperError : The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.
Example:
// Apply non-uniform scale to node "Hand"
const node = model.getNode("Hand");
node.matrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(5.0, 1.0, 1.0), node.matrix);
按名称获取节点。
Name Type Description
name string glTF 中节点的名称。
Returns:
具有给定名称的节点,如果节点不存在则返回未定义。
Throws:
  • DeveloperError : 模型未加载。请使用 Model.readyEvent 或等待 Model.ready 为 true。
Example:
// 对节点 "Hand" 应用非均匀缩放
const node = model.getNode("Hand");
node.matrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(5.0, 1.0, 1.0), node.matrix);
将模型的 Model#style 标记为脏,这将强制所有特征在模型可见的下一帧重新评估样式。

setArticulationStage(articulationStageKey, value)

设置铰接阶段的当前值。设置一个或多个 阶段值后,调用 Model.applyArticulations() 以 重新计算节点矩阵。
Name Type Description
articulationStageKey string 铰接的名称、一个空格以及阶段的名称。
value number 此铰接阶段的数值。
Throws:
  • DeveloperError : 模型未加载。请使用 Model.readyEvent 或等待 Model.ready 为 true。
Example:
// 设置属于名为 "SampleArticulation" 的铰接的名为 "MoveX" 的阶段的值
model.setArticulationStage("SampleArticulation MoveX", 50.0);
See:
ViewerCesiumWidget 渲染场景以获取渲染此图元所需的绘制命令时调用。

不要直接调用此函数。此处列出文档仅用于 列出渲染场景时可能传播的异常:

Throws:

Type Definitions

Cesium.Model.GltfCallback(gltf)

加载完成后使用加载的 gltf 对象调用的函数接口。
Name Type Description
gltf object gltf 对象
Need help? The fastest way to get answers is from the community and team on the Cesium Forum.