Model

internal constructor new Cesium.Model()

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

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
获取模型的分类类型。这决定了 terrain、 3D 瓦片或两者将按此模型分类。

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

  • glTF 不能包含变形目标、皮肤或动画。
  • glTF 不能包含 EXT_mesh_gpu_instancing 扩展。
  • 只有带有 TRIANGLES 的网格才能用于对其他资产进行分类。
  • 网格必须防水。
  • POSITION 属性是必需的。
  • 如果要素 ID 和索引缓冲区都存在,则具有相同要素 ID 的所有索引必须占据索引缓冲区的连续部分。
  • 如果存在要素 ID 而没有索引缓冲区,则具有相同要素 ID 的所有位置必须占据位置缓冲区的连续部分。

接受分类的 3D 瓦片或地形必须是不透明的。

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
获取或设置distance 显示条件,指定在什么距离处 从相机将显示此模型。
Default Value: undefined

enableVerticalExaggeration : boolean

如果为 true,则当 Scene.verticalExaggeration 设置为非 1.0 的值时,模型将沿椭球法线放大。
Default Value: true
Example:
// Exaggerate terrain by a factor of 2, but prevent model exaggeration
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 标准弃用策略的情况下进行更改。

The directional light color when shading the model. When undefined the scene's light color is used instead.

通过设置 model.imageBasedLighting.imageBasedLightingFactor = 新笛卡尔2(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 瓦片,这是从 Cesium3DTileset.

readonly ready : boolean

如果为 true,则此模型已准备好渲染,即外部二进制文件 image、 下载了着色器文件并创建了 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,该 promise 在模型准备好渲染时进行解析,即当外部二进制文件 image 和 并下载着色器文件并创建 WebGL 资源。

模型可以是扩展名为 .gltf 的传统 glTF 资产,也可以是扩展名为 .glb 的二进制 glTF。

Name Type Description
options object Object 具有以下属性:
Name Type Default Description
url string | Resource .gltf 或 .glb 文件的 URL。
basePath string | Resource '' optional glTF JSON 中的 paths 相对于的基本路径。
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 瓦片等情况特别有用,其中每个 .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 瓦片图块集的一部分,则此属性将始终为 false,因为使用的是 3D 瓦片剔除系统。
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 此模型所属的磁贴内容。如果 model 未作为图块集的一部分加载,则此属性将未定义。
heightReference HeightReference HeightReference.NONE optional 确定如何相对于地形绘制模型。
scene Scene optional 对于使用 height reference 属性的模型,必须传入。
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 对模型进行着色时的浅色。如果未定义,则使用场景的 light 颜色。
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 中准确投影模型的位置。如果这是真的,模型将精确投影到 2D,但它会使用更多的内存来执行此操作。如果为 false,则模型将使用更少的内存,并且仍将以 2D/CV 模式渲染,但其位置可能不准确。这将禁用 minimumPixelSize 并防止将来对模型矩阵进行修改。在模型加载后也无法设置此项。
enablePick boolean false optional 当不使用 WebGL 2 或更高版本时,是否允许使用 CPU 选择和选择。如果使用 WebGL 2 或更高版本,则此选项将被忽略。如果使用 WebGL 1 并且这是真的,则 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没有标注字段,因此此类要素 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 瓦片或两者进行分类。在模型加载后无法设置此项。
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 : The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.
销毁此对象持有的 WebGL 资源。 销毁对象允许确定性 释放 WebGL 资源,而不是依赖垃圾回收器来销毁这个对象。

一旦对象被销毁,就不应该使用它;调用 isDestroyed 将导致 DeveloperError 异常。 因此 将返回值 (undefined) 分配给对象,如示例中所示。
Throws:
Example:
model = model && model.destroy();
See:

getExtension(extensionName)object|undefined

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

此功能不是最终的,在没有 Cesium 的标准弃用政策的情况下可能会发生变化。

返回 glTF 中具有给定名称的节点。这用于 修改用户定义的动画的节点变换。
Name Type Description
name string glTF 中节点的名称。
Returns:
节点,如果不存在具有该名称的节点,则为 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 标记为 dirty,这将强制执行所有特征 在下一帧中重新评估样式,模型可见。

setArticulationStage(articulationStageKey, value)

设置清晰度阶段的当前值。 设置一个或 多个 stage 值,调用 Model.applyArticulations() 以 导致重新计算节点矩阵。
Name Type Description
articulationStageKey string 关节的名称、空格和舞台的名称。
value number 此发音阶段的数值。
Throws:
  • DeveloperError : The model is not loaded. Use Model.readyEvent or wait for Model.ready to be 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 对象
Need help? The fastest way to get answers is from the community and team on the Cesium Forum.