Class: Model

Model

new Model()

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

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

See:

Members

readonly activeAnimationsModelAnimationCollection

当前正在播放的glTF动画。

backFaceCullingboolean

是否剔除背面几何体。当为true时,背面剔除由材质的doubleSided属性确定; 当为false时,禁用背面剔除。如果 Model#color 是半透明的或 Model#silhouetteSize 大于0.0,则不剔除背面。

Default Value:
true

readonly boundingSphereBoundingSphere

获取模型在世界空间中的包围球。这不考虑glTF动画、蒙皮或变形目标。 也不考虑 Model#minimumPixelSize

clampAnimationsboolean

确定模型的动画是否应在没有指定关键帧的帧之间保持姿势。

Default Value:
true

readonly classificationTypeClassificationType

获取模型的分类类型。这确定了此模型将对地形、3D Tiles还是两者进行分类。

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

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

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

Default Value:
undefined

clippingPlanesClippingPlaneCollection

用于选择性地禁用模型渲染的 ClippingPlaneCollection

colorColor

与模型渲染颜色混合的颜色。

Default Value:
undefined

colorBlendAmountnumber

colorBlendModeMIX 时用于确定颜色强度的值。值为0.0时产生模型的渲染颜色,值为1.0时产生纯色,中间值产生两者的混合。

Default Value:
0.5

colorBlendModeCesium3DTileColorBlendMode ColorBlendMode

定义颜色如何与模型混合。

Default Value:
ColorBlendMode.HIGHLIGHT

readonly creditCredit

获取将为模型显示的版权信息。

customShaderCustomShader

模型的自定义着色器(如果存在)。将自定义着色器与 Cesium3DTileStyle 一起使用可能会导致未定义的行为。

debugShowBoundingVolumeboolean

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

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

Default Value:
false

debugWireframeboolean

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

以线框形式绘制模型。

Default Value:
false

distanceDisplayConditionDistanceDisplayCondition

获取或设置距离显示条件,指定此模型将在距离相机多远的距离显示。

Default Value:
undefined

readonly errorEventEvent

获取当模型遇到异步渲染错误时触发的事件。通过订阅此事件, 您将收到错误通知并有可能从中恢复。事件监听器会接收 ModelError 的一个实例。

featureIdLabelstring

用于拾取和样式化的要素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优先。

heightReferenceHeightReference

模型的高度参考,确定模型相对于地形的绘制方式。

Default Value:
{HeightReference.NONE}

idobject

拾取模型时返回的用户定义对象。

Default Value:
undefined
See:

imageBasedLightingImageBasedLighting

用于管理此模型上基于图像的光照的属性。

instanceFeatureIdLabelstring

用于拾取和样式化的实例要素ID集的标签。

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

lightColorCartesian3

着色模型时的光源颜色。当为 undefined 时,改用场景的光源颜色。

通过设置 model.imageBasedLighting.imageBasedLightingFactor = new Cartesian2(0.0, 0.0) 来禁用额外的光源会使模型变得更暗。在这里,增加光源的强度会使模型变亮。

Default Value:
undefined

maximumScalenumber

模型的最大缩放大小。这可用于为 Model#minimumPixelSize 设置上限, 确保模型永远不会达到不合理的缩放。

minimumPixelSizenumber

忽略缩放,模型的近似最小像素大小。 这可用于确保即使查看器缩小,模型也可见。 当为 0.0 时,不强制最小大小。

Default Value:
0.0

modelMatrixMatrix4

将模型从模型坐标转换为世界坐标的4x4变换矩阵。 当这是单位矩阵时,模型以世界坐标绘制,即地球的笛卡尔WGS84坐标。 可以通过提供不同的变换矩阵来使用局部参考系,例如 Transforms.eastNorthUpToFixedFrame 返回的矩阵。

Default Value:
Matrix4.IDENTITY
Example
const origin = SuperMap3D.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);
m.modelMatrix = SuperMap3D.Transforms.eastNorthUpToFixedFrame(origin);

outlineColorColor

渲染轮廓时使用的颜色。

Default Value:
Color.BLACK

pointCloudShadingPointCloudShading

用于控制点云衰减和光照的点云着色设置。 对于3D Tiles,这是从Cesium3DTileset继承的。

readonly readyboolean

当为 true 时,此模型准备好渲染,即外部二进制文件、 图像和着色器文件已下载,且WebGL资源已创建。

Default Value:
false

readonly readyEventEvent

获取一个事件,当模型加载完成并准备好渲染时触发,即当外部资源已下载且WebGL资源已创建时。 事件监听器会接收 Model 的一个实例。

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

scalenumber

Model#modelMatrix 之前应用于此模型的统一缩放。 大于 1.0 的值会增大模型大小;小于 1.0 的值会减小大小。

Default Value:
1.0

shadowsShadowMode

确定模型是否投射或接收来自光源的阴影。

Default Value:
ShadowMode.ENABLED

showboolean

是否渲染模型。

Default Value:
true

showCreditsOnScreenboolean

获取或设置是否在屏幕上显示模型的版权信息。

Default Value:
false

showOutlineboolean

是否为使用 CESIUM_primitive_outline 扩展的模型显示轮廓。 当为true时,显示轮廓。当为false时,不显示轮廓。

Default Value:
true

silhouetteColorColor

轮廓颜色。

Default Value:
Color.RED

silhouetteSizenumber

轮廓的大小(以像素为单位)。

Default Value:
0.0

splitDirectionSplitDirection

应用于此模型的 SplitDirection 分割。

Default Value:
SplitDirection.NONE

应用于模型中要素的样式。如果同时应用了 CustomShader,则无法应用此样式。

readonly texturesReadyEventEvent

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

Methods

static fromGltfAsync(options){Promise.<Model>}

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

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

Name Type Description
options object

具有以下属性的对象:

Name Type Default Description
url string | Resource

.gltf或.glb文件的url。

basePath string | Resource '' 可选

glTF JSON中的路径相对于的基本路径。

show boolean true 可选

是否渲染模型。

modelMatrix Matrix4 Matrix4.IDENTITY 可选

将模型从模型坐标转换为世界坐标的4x4变换矩阵。

scale number 1.0 可选

应用于此模型的统一缩放。

minimumPixelSize number 0.0 可选

忽略缩放,模型的近似最小像素大小。

maximumScale number 可选

模型的最大缩放大小。是minimumPixelSize的上限。

id object 可选

当使用 Scene#pick 拾取模型时返回的用户定义对象。

allowPicking boolean true 可选

当为 true 时,每个图元都可以使用 Scene#pick 进行拾取。

incrementallyLoadTextures boolean true 可选

确定模型加载后纹理是否可以继续流式传输。

asynchronous boolean true 可选

确定模型WebGL资源创建是分散在几帧中完成,还是在所有glTF文件加载后立即阻塞直到完成。

clampAnimations boolean true 可选

确定模型的动画是否应在没有指定关键帧的帧之间保持姿势。

shadows ShadowMode ShadowMode.ENABLED 可选

确定模型是否投射或接收来自光源的阴影。

releaseGltfJson boolean false 可选

当为true时,一旦glTF加载完成,就会释放glTF JSON。这对于3D Tiles之类的情况特别有用,其中每个.gltf模型都是唯一的,缓存glTF JSON没有效果。

debugShowBoundingVolume boolean false 可选

仅用于调试。为模型中的每个绘制命令绘制包围球。

enableDebugWireframe boolean false 可选

仅用于调试。必须将其设置为true才能在WebGL1中使用debugWireframe。无法在模型加载后设置此属性。

debugWireframe boolean false 可选

仅用于调试。以线框形式绘制模型。如果enableDebugWireframe设置为true,则仅在WebGL1中工作。

cull boolean true 可选

是否使用视锥体/地平线剔除来剔除模型。如果模型是3D Tiles瓦片集的一部分,则此属性将始终为false,因为使用了3D Tiles剔除系统。

opaquePass boolean Pass.OPAQUE 可选

用于模型不透明部分的 DrawCommand 中的通道。

upAxis Axis Axis.Y 可选

glTF模型的向上轴。

forwardAxis Axis Axis.Z 可选

glTF模型的向前轴。

customShader CustomShader 可选

自定义着色器。这将向顶点和片段着色器添加用户定义的GLSL代码。将自定义着色器与 Cesium3DTileStyle 一起使用可能会导致未定义的行为。

content Cesium3DTileContent 可选

此模型所属的瓦片内容。如果模型未作为瓦片集的一部分加载,则此属性将为undefined。

heightReference HeightReference HeightReference.NONE 可选

确定模型相对于地形的绘制方式。

scene Scene 可选

对于使用高度参考属性的模型,必须传入此项。

distanceDisplayCondition DistanceDisplayCondition 可选

指定此模型将在距离相机多远的距离显示的条件。

color Color 可选

与模型渲染颜色混合的颜色。

colorBlendMode ColorBlendMode ColorBlendMode.HIGHLIGHT 可选

定义颜色如何与模型混合。

colorBlendAmount number 0.5 可选

colorBlendModeMIX 时用于确定颜色强度的值。值为0.0时产生模型的渲染颜色,值为1.0时产生纯色,中间值产生两者的混合。

silhouetteColor Color Color.RED 可选

轮廓颜色。如果超过256个模型启用了轮廓,则重叠的模型有很小的机会出现轻微的伪影。

silhouetteSize number 0.0 可选

轮廓的大小(以像素为单位)。

enableShowOutline boolean true 可选

是否为使用CESIUM_primitive_outline扩展的模型启用轮廓。可以将其设置为false以避免在加载时额外处理几何体。当为false时,showOutlines和outlineColor选项将被忽略。

showOutline boolean true 可选

是否为使用CESIUM_primitive_outline扩展的模型显示轮廓。当为true时,显示轮廓。当为false时,不显示轮廓。

outlineColor Color Color.BLACK 可选

渲染轮廓时使用的颜色。

clippingPlanes ClippingPlaneCollection 可选

用于选择性地禁用模型渲染的 ClippingPlaneCollection

lightColor Cartesian3 可选

着色模型时的光源颜色。当为 undefined 时,改用场景的光源颜色。

imageBasedLighting ImageBasedLighting 可选

用于管理此模型上基于图像的光照的属性。

backFaceCulling boolean true 可选

是否剔除背面几何体。当为true时,背面剔除由材质的doubleSided属性确定;当为false时,禁用背面剔除。如果模型的颜色是半透明的,则不剔除背面。

credit Credit | string 可选

数据源的版权信息,显示在画布上。

showCreditsOnScreen boolean false 可选

是否在屏幕上显示此模型的版权信息。

splitDirection SplitDirection SplitDirection.NONE 可选

应用于此模型的 SplitDirection 分割。

projectTo2D boolean false 可选

是否在2D中准确投影模型的位置。如果为true,模型将准确投影到2D,但会使用更多内存。如果为false,模型将使用更少内存,仍将在2D/CV模式下渲染,但其位置可能不准确。这会禁用minimumPixelSize并阻止将来对模型矩阵的修改。也无法在模型加载后设置此属性。

enablePick boolean false 可选

是否允许在不使用WebGL 2或更高版本时使用pick进行CPU拾取。如果使用WebGL 2或更高版本,此选项将被忽略。如果使用WebGL 1且此项为true,则pick操作将正常工作,但会使用更多内存。如果在WebGL 1下运行且此项为false,则模型将使用更少内存,但pick将始终返回undefined。无法在模型加载后设置此属性。

featureIdLabel string | number "featureId_0" 可选

用于拾取和样式化的要素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" 可选

用于拾取和样式化的实例要素ID集的标签。如果instanceFeatureIdLabel设置为整数N,则会自动转换为字符串"instanceFeatureId_N"。如果同时存在每个图元和每个实例的要素ID,则实例要素ID优先。

pointCloudShading object 可选

用于构造 PointCloudShading 对象的选项,以控制点衰减和光照。

classificationType ClassificationType 可选

确定此模型将对地形、3D Tiles还是两者进行分类。无法在模型加载后设置此属性。

gltfCallback Model.GltfCallback 可选

加载后调用已加载gltf对象的函数。

Throws:
  • 模型加载失败。

    Type
    RuntimeError
  • 不支持的glTF版本。

    Type
    RuntimeError
  • 不支持的glTF扩展。

    Type
    RuntimeError
Returns:
Type Description
Promise.<Model> 一个Promise,当创建的模型准备好渲染时,它将解析为该模型。
Examples
// 加载模型并将其添加到场景中
try {
 const model = await SuperMap3D.Model.fromGltfAsync({
   url: "./duck/duck.glb"
 });
 viewer.scene.primitives.add(model);
} catch (error) {
 console.log(`模型加载失败。${error}`);
}
// 使用modelMatrix定位模型,并以128像素的最小大小显示
const position = SuperMap3D.Cartesian3.fromDegrees(
  -123.0744619,
  44.0503706,
  5000.0
);
const headingPositionRoll = new SuperMap3D.HeadingPitchRoll();
const fixedFrameTransform = SuperMap3D.Transforms.localFrameToFixedFrameGenerator(
  "north",
  "west"
);
try {
 const model = await SuperMap3D.Model.fromGltfAsync({
   url: "./duck/duck.glb",
   modelMatrix: SuperMap3D.Transforms.headingPitchRollToFixedFrame(
     position,
     headingPositionRoll,
     SuperMap3D.Ellipsoid.WGS84,
     fixedFrameTransform
   ),
   minimumPixelSize: 128,
 });
 viewer.scene.primitives.add(model);
} catch (error) {
 console.log(`模型加载失败。${error}`);
}
// 加载模型并以半速播放最后一个动画
let animations;
try {
 const model = await SuperMap3D.Model.fromGltfAsync({
   url: "./duck/duck.glb",
   gltfCallback: gltf => {
     animations = gltf.animations
   }
 });
 viewer.scene.primitives.add(model);
 model.readyEvent.addEventListener(() => {
   model.activeAnimations.add({
     index: animations.length - 1,
     loop: SuperMap3D.ModelAnimationLoop.REPEAT,
     multiplier: 0.5,
   });
 });
} catch (error) {
 console.log(`模型加载失败。${error}`);
}

applyArticulations()

将任何已修改的关节阶段应用于参与任何关节的每个节点的矩阵。 请注意,这将覆盖参与节点上的任何节点变换。

Throws:

模型未加载。使用Model.readyEvent或等待Model.ready为true。

Type
DeveloperError

destroy()

销毁此对象持有的WebGL资源。销毁对象允许以确定性的方式释放WebGL资源, 而不是依赖垃圾收集器来销毁此对象。

一旦对象被销毁,就不应再使用它;调用除 isDestroyed 以外的 任何函数将导致 DeveloperError 异常。因此, 像示例中那样将返回值 (undefined) 分配给对象。

See:
Throws:

此对象已被销毁,即已调用destroy()。

Type
DeveloperError
Example
model = model && model.destroy();

getNode(name){ModelNode}

返回glTF中具有给定 name 的节点。这用于修改节点的变换以进行用户定义的动画。

Name Type Description
name string

glTF中节点的名称。

Throws:

模型未加载。使用Model.readyEvent或等待Model.ready为true。

Type
DeveloperError
Returns:
Type Description
ModelNode 节点,如果不存在具有 name 的节点,则返回 undefined
Example
// 对节点"Hand"应用非统一缩放
const node = model.getNode("Hand");
node.matrix = SuperMap3D.Matrix4.fromScale(new SuperMap3D.Cartesian3(5.0, 1.0, 1.0), node.matrix);

isDestroyed(){boolean}

Returns true if this object was destroyed; otherwise, false.

If this object was destroyed, it should not be used; calling any function other than isDestroyed will result in a DeveloperError exception.

See:
Returns:
Type Description
boolean true if this object was destroyed; otherwise, false.

makeStyleDirty()

将模型的 Model#style 标记为脏,这会强制所有要素 在模型可见的下一帧中重新评估样式。

setArticulationStage(articulationStageKey, value)

设置关节阶段的当前值。在设置一个或多个阶段值后, 调用Model.applyArticulations()以重新计算节点矩阵。

Name Type Description
articulationStageKey string

关节名称,一个空格,以及阶段名称。

value number

此关节阶段的数值。

See:
Throws:

模型未加载。使用Model.readyEvent或等待Model.ready为true。

Type
DeveloperError
Example
// 设置属于名为"SampleArticulation"的关节的名为"MoveX"的阶段的值
model.setArticulationStage("SampleArticulation MoveX", 50.0);

Type Definitions

GltfCallback(gltf)

加载完成后使用已加载的gltf对象调用的函数的接口。

Name Type Description
gltf object

gltf对象