Model

internal constructor new Cesium.Model()

要构造一个 Model,请调用 Model.fromGltfAsync。请勿直接调用构造函数。
基于 glTF 的 3D 模型,这是 WebGL、OpenGL ES 和 OpenGL 的运行时资产格式。

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

注意:对于使用 KHR_texture_basisu 扩展的压缩纹理模型,我们建议在两个维度上都使用 2 的幂次纹理 以实现最大兼容性。这是因为某些采样器需要 2 的幂次纹理 (Using textures in WebGL) 并且 KHR_texture_basisu 需要 4 的倍数维度 (KHR_texture_basisu additional requirements).

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 的标签属性,或 在未指定时为 "featureId_N"(N 是 featureIds 数组中的索引)。EXT_feature_metadata 没有标签字段,因此这样的 特征 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 资产创建模型。该函数返回一个承诺,当模型准备好渲染时解析,即当外部的二进制文件、图像 和着色器文件被下载并且 WebGL 资源被创建时。

模型可以是具有 .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 模型的最大缩放大小。最小像素大小的上限。
id object optional 用户定义的对象,当使用 Scene#pick 拾取模型时返回。
allowPicking boolean true optionaltrue 时,每个原始图元都可用 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 JSON 将在 glTF 加载后被释放。在诸如 3D Tiles 这样的情况下,这尤其有用,因为每个 .gltf 模型都是唯一的,缓存 glTF JSON 无效。
debugShowBoundingVolume boolean false optional 仅用于调试。为模型中的每个绘制命令绘制包围球。
enableDebugWireframe boolean false optional 仅用于调试。必须设置为 true 才能在 WebGL1 中启用 debugWireframe。在模型加载后不能设置此属性。
debugWireframe boolean false optional 仅用于调试。以线框模式绘制模型。仅在 WebGL1 中,如果 enableDebugWireframe 设置为 true 时有效。
cull boolean true optional 是否使用视锥体/地平线剔除模型。如果模型是 3D Tiles 瓦片集的一部分,此属性将始终为 false,因为使用 3D Tiles 剔除系统。
opaquePass boolean Pass.OPAQUE optional 用于模型不透明部分的 DrawCommand 的通道。
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 的标签属性,或在未指定时为 "featureId_N"(其中 N 是 featureIds 数组中的索引)。EXT_feature_metadata 没有标签字段,因此这样的特征 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:
一个承诺,当模型准备好渲染时解析为创建的模型。
Throws:
Examples:
// Load a model and add it to the scene
try {
 const model = await Cesium.Model.fromGltfAsync({
   url: "../../SampleData/models/CesiumMan/Cesium_Man.glb"
 });
 viewer.scene.primitives.add(model);
} catch (error) {
 console.log(`Failed to load model. ${error}`);
}
// Position a model with modelMatrix and display it with a minimum size of 128 pixels
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(`Failed to load model. ${error}`);
}
// Load a model and play the last animation at half speed
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(`Failed to load model. ${error}`);
}
将任何修改过的关节阶段应用于参与任何关节的每个节点的矩阵。请注意,这将覆盖参与节点的任何节点变换。
Throws:
  • DeveloperError : 模型尚未加载。请使用 Model.readyEvent 或等待 Model.ready 为 true。
销毁此对象持有的 WebGL 资源。销毁对象允许确定性地 释放 WebGL 资源,而不是依赖垃圾收集器来销毁此对象。

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

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 的标准弃用政策而发生变化

返回 glTF 中具有给定 name 的节点。用于 修改节点的变换以实现用户定义的动画。
Name Type Description
name string glTF 中节点的名称。
Returns:
节点,如果不存在具有该 name 的节点,则返回 undefined
Throws:
  • DeveloperError : 模型尚未加载。请使用 Model.readyEvent 或等待 Model.ready 为 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);

isDestroyed()boolean

如果此对象已销毁,则返回 true;否则返回 false。

如果此对象已被销毁,则不应使用;调用除了 isDestroyed 以外的任何函数将导致 DeveloperError 异常。
Returns:
如果此对象已被销毁,则返回 true;否则返回 false
See:
将模型的 Model#style 标记为脏,这会强制所有特征 在模型可见的下一帧重新评估样式。

setArticulationStage(articulationStageKey, value)

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

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

Throws:

Type Definitions

Cesium.Model.GltfCallback(gltf)

加载完成后,带有加载的 gltf 对象调用的函数的接口。
Name Type Description
gltf object gltf 对象
需要帮助?获得答案的最快方法是来自社区和团队 Cesium Forum.