格网是一种常规的客户端 3D 几何类型,由具有属性的折点组成。折点包括地理位置、影响照明/阴影的法线以及可用于将图像映射到格网的 uv 坐标。折点被组合成 3D 基元以渲染场景中的格网(目前仅支持三角形基元)。
格网几何可以具有决定其显示方式的固有材料。与场景图层中的 3D 对象类似,格网几何使用包含 FillSymbol3DLayer 的 MeshSymbol3D 符号进行符号化。
为了支持多种材质(复杂 3D 模型通常就是这种情况),格网可以定义为格网中的特定区域定义材质的组件。除了支持多种材质外,组件还可以重用折点,否则这些折点将被复制以形成三角形。
创建简单的格网几何基元
格网几何类具有许多用于创建简单基元形状的便利功能。这些形状可以帮助您开始了解格网几何。
// 创建盒子格网几何
let mesh = Mesh.createBox(location, {
size: {
width: 100,
height: 50,
depth: 50
},
material: {
color: "red"
}
});
// 创建图形并将其添加到视图中
let graphic = new Graphic({
geometry: mesh,
symbol: {
type: "mesh-3d",
symbolLayers: [ { type: "fill" } ]
}
});
view.graphics.add(graphic);
手动创建格网几何
可以通过指定顶点属性和组件来手动创建网格几何图形,如以下示例所示:
// 创建表示金字塔的格网几何
let pyramidMesh = new Mesh({
vertexAttributes: {
// 巴黎卢浮宫金字塔的折点位置
position: [
// 折点 0 - 金字塔的底部,南
2.336006, 48.860818, 0,
// 折点 1 - 金字塔的底部,东
2.336172, 48.861114, 0,
// 折点 2 - 金字塔的底部,北
2.335724, 48.861229, 0,
// 折点 3 - 金字塔的底部,西
2.335563, 48.860922, 0,
// 折点 4 - 金字塔的顶部
2.335896, 48.861024, 21
]
},
// 添加带有索引折点的面的单个组件
// 因此我们只需要定义一次
components: [
{
faces: [
0, 4, 3,
0, 1, 4,
1, 2, 4,
2, 3, 4
]
}
],
// 如果折点的位置不在 WGS84 中,请指定空间参考
});
// 将折点几何添加到图形
let graphic = new Graphic({
geometry: pyramidMesh,
symbol: {
type: "mesh-3d",
symbolLayers: [ { type: "fill" } ]
}
});
view.graphics.add(graphic);
注意:从版本 4.11 开始,格网几何不再支持自动转换。
- 示例:
-
- MeshComponent
- geoscene/geometry/support/meshUtils
构造函数
属性列表
名称 | 类型 | 描述 | 类 | |
---|---|---|---|---|
Object | 更多信息 缓存用于存储从几何图形中计算的值,这些几何图形需要在突变时清除或重新计算。 | 更多信息 | Geometry | |
MeshComponent[] | 更多信息 一组格网组件,可用于将材质应用于同一格网的不同区域。 | 更多信息 | Mesh | |
String | 更多信息 类名。 | 更多信息 | Accessor | |
Extent | 更多信息 格网几何的 3D 范围。 | 更多信息 | Mesh | |
Boolean | 更多信息 指示几何是否具有 M 值。 | 更多信息 | Geometry | |
Boolean | 更多信息 指示几何是否具有 z 值(高程)。 | 更多信息 | Geometry | |
SpatialReference | 更多信息 几何的空间参考。 | 更多信息 | Geometry | |
String | 更多信息 表示几何类型的字符串值。 | 更多信息 | Mesh | |
Accessor | 更多信息 描述格网的每个折点的属性的对象。 | 更多信息 | Mesh |
属性详细说明
-
缓存用于存储从几何图形中计算的值,这些几何图形需要在突变时清除或重新计算。 例如,面的范围。
-
components MeshComponent[]autocast
-
一组格网组件,可用于将材质应用于同一格网的不同区域。组件有三种常见的使用模式。
- 为整个格网指定材质。在这种情况下,请使用仅具有材质的单个组件(将面保留为
null
)。 - 重用折点属性。对连续曲面进行建模时,只需指定一次折点,然后简单地引用它们,这样会很方便。在这种情况下,请使用设置了面的单个组件来索引形成三角形的折点属性。
- 为同一格网指定多个材质。在这种情况下,请使用多个组件,其面确定组件的材料应用于格网的哪个区域。
- 为整个格网指定材质。在这种情况下,请使用仅具有材质的单个组件(将面保留为
-
类名。类的名称声明格式为
geoscene.folder.className
。
-
extent Extentreadonly
-
网格几何的 3D 范围。范围是根据存储在 vertexAttributes中的顶点位置位置计算的。3D 范围是按需计算和缓存的。如果手动修改顶点属性,则必须调用 vertexAttributesChanged() 以确保重新计算范围。
-
指示几何是否具有 M 值。
-
指示几何是否具有 z 值(高程)。
在地理或公制坐标系中定义的Z 值是 以米单位。 但是,在使用投影坐标系的局部场景中,假定垂直单位与服务指定的水平单位相同。
-
-
几何的空间参考。
- 默认值:WGS84 (wkid: 4326)
-
描述格网的每个折点的属性的对象。折点属性是平面数值数组,用于描述每个折点的位置(强制)、法线(用于照明计算和着色)和 uv(用于将材质图像映射到格网表面)。
折点属性可以通过组件面属性中指定的索引进行寻址。如果格网不包含任何组件,或者组件未指定任何面,则折点属性将被解释为好像每个连续的折点三元组组成一个三角形。
- 属性:
-
position Float64Array自动转换自 Number[]|Float32Array
折点位置的平面数组。折点位置具有 x、y 和 z 坐标,并且它们应位于几何的空间参考系统中。
uv Float32Array自动转换自 Number[]|Float64Array折点 uv 坐标的平面数组(每个折点 2 个元素)。
normal Float32Array自动转换自 Number[]|Float64Array折点法线的平面数组(每个折点 3 个元素,范围从 -1 到 1)。
color Uint8Array自动转换自 Number[]|Uint8ClampedArraySince: 4.9
折点颜色的平面数组(每个折点 4 个元素,范围从 0 到 255)。折点颜色乘以组件材料颜色(如果已定义)。
tangent Float32Array自动转换自 Number[]|Float64ArraySince: 4.11
折点切线的平面数组(每个折点 4 个元素,范围从 -1 到 1。第 4 个元素是一个符号值(-1 或 +1),表示切线基的偏手性)。折点切线用于法线映射,请参见 MeshMaterial.normalTexture。
示例代码:let mesh = new Mesh({ spatialReference: SpatialReference.WebMercator }); // 指定围绕给定点组成正方形的两个三角形的折点。 // 设置 Uv 坐标以从角到角覆盖从 (0, 0) 到 (1, 1) 的正方形。 mesh.vertexAttributes = { position: [ pt.x - 10, pt.y - 10, 100, pt.x + 10, pt.y - 10, 100, pt.x + 10, pt.y + 10, 100, pt.x - 10, pt.y - 10, 100, pt.x + 10, pt.y + 10, 100, pt.x - 10, pt.y + 10, 100 ], uv: [ 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1 ] };
方法列表
名称 | 返回值类型 | 描述 | 类 | |
---|---|---|---|---|
更多信息 将组件添加到格网中。 | 更多信息 | Mesh | ||
Mesh | 更多信息 将格网居中于指定位置,而不更改其比例。 | 更多信息 | Mesh | |
Mesh | 更多信息 创建 Mesh 对象的深度克隆。 | 更多信息 | Mesh | |
Mesh | 更多信息 创建表示框的格网。 | 更多信息 | Mesh | |
Mesh | 更多信息 创建表示圆柱体的格网。 | 更多信息 | Mesh | |
Promise<Mesh> | 更多信息 从 | 更多信息 | Mesh | |
Mesh | 更多信息 从面几何创建新的格网几何。 | 更多信息 | Mesh | |
Mesh | 更多信息 创建表示平面的格网。 | 更多信息 | Mesh | |
Mesh | 更多信息 创建表示球体的格网。 | 更多信息 | Mesh | |
* | 更多信息 创建此类的新实例并使用从 GeoScene 产品生成的 JSON 对象的值对其进行初始化。 | 更多信息 | Geometry | |
Mesh | 更多信息 将格网几何偏移指定的距离(以 x、y 和 z 为单位)。 | 更多信息 | Mesh | |
更多信息 从格网中移除组件。 | 更多信息 | Mesh | ||
Mesh | 更多信息 围绕其 x、y 和 z 轴旋转格网几何(按该顺序)。 | 更多信息 | Mesh | |
Mesh | 更多信息 按指定系数缩放格网几何。 | 更多信息 | Mesh | |
Object | 更多信息 将此类的实例转换为其 GeoScene portal JSON 格式。 | 更多信息 | Geometry | |
更多信息 通知需要重新计算依赖于折点属性的任何缓存值。 | 更多信息 | Mesh |
方法详细说明
-
addComponent(component)
-
将组件添加到格网中。
参数:自动转换自 Object要添加的组件。
-
centerAt(location, params){Mesh}
-
在指定位置居中格网而不改变其比例。 格网将就地修改。要改为修改格网副本,请在调用 centerAt() 之前使用 clone()。
参数:规范:location Point格网居中的位置。
params Objectoptional其他参数。
规范:geographic Booleanoptional是相对于地球还是投影坐标系 (PCS) 进行地理配准。此参数仅与可在局部和全球查看模式(当前仅限 WebMercator)中使用的空间参考相关,否则将被忽略。默认值为 true。如果为 true,则应用于格网中心的平移在笛卡尔系统中相对于地球上的局部坐标系完成,并以米为单位指定。
origin Pointoptional要居中的原点。如果未指定,格网将在格网范围中心居中。
返回值:类型 描述 Mesh 修改后的格网。
-
-
创建表示框的格网。生成的格网的空间参考与其放置位置相同。
框 UV 坐标空间
框几何将具有根据以下方案生成的 UV 坐标:
参数:规范:location Point框的底部中心位置。
params Objectoptional其他参数。
规范:optional 统一大小值或包含单个值”宽度“、”高度“和”深度“的对象。大小值的单位派生自所提供位置的空间参考,除非指定了单位。
规范:width Numberoptional创建的格网的宽度。
depth Numberoptional创建的格网的深度。
height Numberoptional创建的格网的高度。
geographic Booleanoptional是相对于地球还是投影坐标系 (PCS) 进行地理配准。此参数仅与可在局部和全球查看模式(当前仅限 WebMercator)中使用的空间参考相关,否则将被忽略。默认值为 true。如果为 true,则在笛卡尔系统中相对于地球上的局部坐标系创建格网,并以米为单位指定大小。
unit Stringoptional大小的单位(默认为位置空间参考的单位)。
可选值:"millimeters"|"centimeters"|"decimeters"|"meters"|"kilometers"|"inches"|"feet"|"yards"|"miles"|"nautical-miles"|"us-feet"
optional 自动转换自 Object用于格网的材质。
imageFace Stringoptional用于生成图像 uv 坐标的面。 默认情况下,会为所有面生成一组未包络的 UV 坐标。 通过将
imageFace
参数设置为east
、west
、north
、south
之一,up
或down
,指定的面将具有完整大小的 UV 坐标,而其他面将属于其常规未包络的 UV 坐标。 这对于仅将图像应用于框的单个面很有用。 提供的material
参数将应用于指定的imageFace
。 生成的格网将有两个组件,第一个包含选定的图像面,第二个包含框的其他面。返回值:类型 描述 Mesh 生成的格网。 示例代码:let mesh = Mesh.createBox(point, { size: { width: 10, height: 100, depth: 20 }, material: { color: "green" } });
let mesh = Mesh.createBox(point, { imageFace: "top", material: { colorTexture: new MeshTexture({ url: "./url-to-image.png" }) } });
-
-
创建表示圆柱体的格网。生成的格网的空间参考与其放置位置相同。
圆柱 UV 坐标空间
圆柱体几何将具有根据以下方案生成的 UV 坐标(示例如 8 个折点圆柱体所示):
参数:规范:location Point圆柱体底部中心的位置。
params Objectoptional其他参数。
规范:optional 统一大小值或包含单个值”宽度“、”高度“和”深度“的对象。大小值的单位派生自所提供位置的空间参考,除非指定了特定单位。
规范:width Numberoptional创建的格网的宽度。
depth Numberoptional创建的格网的深度。
height Numberoptional创建的格网的高度。
geographic Booleanoptional是相对于地球还是投影坐标系 (PCS) 进行地理配准。此参数仅与可在局部地和全球查看模式(当前仅限 WebMercator)中使用的空间参考相关,否则将被忽略。默认值为 true。如果为 true,则在笛卡尔系统中相对于地球上的局部坐标系创建格网,并以米为单位指定大小。
unit Stringoptional大小的单位(默认为位置空间参考的单位)。
可选值:"millimeters"|"centimeters"|"decimeters"|"meters"|"kilometers"|"inches"|"feet"|"yards"|"miles"|"nautical-miles"|"us-feet"
densificationFactor Numberoptional用于生成表示圆柱体的格网的附加细分数。致密化因子参数 0 将生成默认值 16 个折点以近似于圆柱体。致密化因子为 1 将生成 32 个折点,依此类推。致密化因子越大,格网就越接近完美的圆柱体(以处理和渲染性能为代价)。
optional 自动转换自 Object用于格网的材质。
返回值:类型 描述 Mesh 生成的格网。
-
起始版本: GeoScene API for JavaScript 4.22
-
从
url
参数引用的 glTF 模型创建新的格网几何。 生成的格网的空间参考与location
参数相同。 有关支持的 glTF 功能的更多信息,您可以阅读使用 3D 符号可视化点 指南主题。 目前不支持动画。参数:规范:location Point模型原点的位置。如果位置不包含 z 值,则假定 z 为
0
。url String<p>glTF 模型的 URL。URL 应指向 glTF 文件(.gltf 或 .glb),该文件可以引用其他二进制文件 (.bin) 和图像文件(.jpg,.png)。</p>
params Objectoptional其他参数。
规范:geographic Booleanoptional是相对于地球还是投影坐标系 (PCS) 进行地理配准。此参数仅与可在局部和全球查看模式(当前仅限 WebMercator)中使用的空间参考相关,否则将被忽略。默认值为 true。如果为 true,则在笛卡尔系统中相对于地球上的局部坐标系创建格网,并以米为单位指定大小。
signal AbortSignaloptional一个 AbortSignal 中止加载过程。 如果取消,promise 将被拒绝,并出现名为
AbortError
的错误。 另请参阅 AbortController。返回值:类型 描述 Promise<Mesh> 解析为表示加载的 glTF 模型的格网几何的 promise。
-
-
从面几何创建一个新的格网几何。 生成的格网仅包含一个位置折点属性和一个带有面的组件。 默认着色将设置为
flat
。 生成的格网的空间参考与输入面相同。 生成的格网将不包含任何 uv 或法线折点属性。参数:polygon Polygon输入面。
params Objectoptional可选参数。
规范:optional 自动转换自 Object用于格网的材质。
返回值:类型 描述 Mesh 表示三角化面的新格网。
-
-
创建表示平面的格网。生成的格网的空间参考与其放置位置相同。平面由两个三角形组成,在创建时可以方便地定向。
平面 UV 坐标空间
平面几何将具有根据以下方案生成的 UV 坐标
参数:规范:location Point平面底部中心的位置。
params Objectoptional其他参数。
规范:optional 统一大小值或包含单个值”宽度“和”高度“的对象。大小值的单位派生自所提供位置的空间参考,除非指定了单位。
规范:width Numberoptional创建的格网的宽度。
height Numberoptional创建的格网的高度。
facing Stringoptional默认值: "up"平面朝向的方向。
可选值:"east"|"west"|"north"|"south"|"up"|"down"
geographic Booleanoptional是相对于地球还是投影坐标系 (PCS) 进行地理配准。此参数仅与可在局部和全球查看模式(当前仅限 WebMercator)中使用的空间参考相关,否则将被忽略。默认值为 true。如果为 true,则在笛卡尔系统中相对于地球上的局部坐标系创建格网,并以米为单位指定大小。
unit Stringoptional大小的单位(默认为位置空间参考的单位)。
可选值:"millimeters"|"centimeters"|"decimeters"|"meters"|"kilometers"|"inches"|"feet"|"yards"|"miles"|"nautical-miles"|"us-feet"
optional 自动转换自 Object用于格网的材质。
返回值:类型 描述 Mesh 生成的格网。
-
-
创建表示球体的格网。生成的格网的空间参考与其放置位置相同。
Sphere UV coordinate space
球体几何将具有根据以下方案生成的 UV 坐标(示例如 8x8 顶点球体所示):
参数:规范:location Point球体底部中心的位置。
params Objectoptional其他参数。
规范:optional 统一大小值或包含单个值"宽度"、"高度"和"深度"的对象。大小值的单位派生自所提供位置的空间参考,除非指定了单位。
规范:width Numberoptional创建的格网的宽度。
depth Numberoptional创建的格网的深度。
height Numberoptional创建的格网的高度。
geographic Booleanoptional是相对于地球还是投影坐标系 (PCS) 进行地理配准。此参数仅与可在局部和全球查看模式(当前仅限 WebMercator)中使用的空间参考相关,否则将被忽略。默认值为 true。如果为 true,则在笛卡尔系统中相对于地球上的局部坐标系创建格网,并以米为单位指定大小。
unit Stringoptional大小的单位(默认为位置空间参考的单位)。
可选值:"millimeters"|"centimeters"|"decimeters"|"meters"|"kilometers"|"inches"|"feet"|"yards"|"miles"|"nautical-miles"|"us-feet"
densificationFactor Numberoptional用于生成表示球体的格网的附加细分数。致密化因子参数 0 将生成默认值为 16 x 16 的折点以近似球体。致密化因子为 1 将生成 32 x 32 的折点,依此类推。致密化因子越大,格网就越接近完美的球体(以处理和渲染性能为代价)。
optional 自动转换自 Object用于格网的材质。
返回值:类型 描述 Mesh 生成的格网。
-
fromJSON(json){*}static
-
创建此类的新实例,并使用从 GeoScene 产品生成的 JSON 对象的值对其进行初始化。传递给输入
json
参数的对象通常来自对 REST API 中的查询操作的响应,或者来自另一个 GeoScene 产品的 toJSON() 方法。有关何时以及如何使用此函数的详细信息和示例,请参阅指南中的使用 fromJSON() 主题。参数:json ObjectGeoScene 格式的实例的 JSON 表示形式。有关各种输入 JSON 对象的结构示例,请参阅 GeoScene REST API 文档。
返回值:类型 描述 * 返回一个该类的新实例。
-
offset(dx, dy, dz, params){Mesh}
-
将格网几何偏移指定的距离(以 x、y 和 z 为单位)。 x、y 和 z 的单位是空间参考的单位。 当在地理上应用偏移量时(默认为 GCS 或 WebMercator),则偏移量以米为单位进行解释。 格网将就地修改。 要修改格网副本,请在调用 offset() 之前使用 clone()。
参数:规范:dx Number在 x 方向上偏移几何的量。
dy Number在 y 方向上偏移几何的量。
dz Number在 z 方向上偏移几何的量。
params Objectoptional其他参数。
规范:geographic Booleanoptional是相对于地球还是投影坐标系 (PCS) 进行地理配准。此参数仅与可在局部和全球查看模式(当前仅限 WebMercator)中使用的空间参考相关,否则将被忽略。默认值为 true。如果为 true,则在笛卡尔系统中应用相对于地球上的局部坐标系的偏移量,并以米为单位指定。
origin Pointoptional要应用偏移的原点。如果未指定,则格网将从格网范围中心偏移。
返回值:类型 描述 Mesh 修改后的格网(此实例)。
-
removeComponent(component)
-
从格网中移除组件。
参数:component MeshComponent要删除的组件。
-
rotate(angleX, angleY, angleZ, params){Mesh}
-
围绕其 x、y 和 z 轴旋转格网几何(按此顺序)。 对于每个旋转角度,当从相应轴的方向看时,旋转方向为顺时针方向。 格网将就地修改。 要修改格网的副本,请在调用 rotate() 之前使用 clone()。
参数:规范:angleX Number绕 x 轴旋转的角度(以度为单位)。
angleY Number旋转的角度(以度为单位)。
angleZ Number旋转的角度(以度为单位)。
params Objectoptional其他参数。
规范:geographic Booleanoptional是相对于地球还是投影坐标系 (PCS) 进行地理配准。此参数仅与可在局部和全球查看模式(当前仅限 WebMercator)中使用的空间参考相关,否则将被忽略。默认值为 true。如果为 true,则在笛卡尔系统中相对于地球上的局部坐标系应用旋转,并以米为单位指定。
origin Pointoptional要围绕其旋转的原点。如果未指定,格网将围绕格网范围中心旋转。
返回值:类型 描述 Mesh 修改后的格网(此实例)。 示例代码:// 将格网在水平面(围绕 z 轴)旋转 90 度, // 并在横向垂直平面(围绕 y 轴)倾斜 20 度。 mesh.rotate(0, 20, 90);
-
scale(factor, params){Mesh}
-
参数:规范:factor Number
缩放几何的量。
params Objectoptional其他参数。
规范:geographic Booleanoptional是相对于地球还是投影坐标系 (PCS) 进行地理配准。此参数仅与可在局部和全球查看模式(当前仅限 WebMercator)中使用的空间参考相关,否则将被忽略。默认值为 true。如果为 true,则在笛卡尔系统中应用相对于地球上的局部坐标系的比例。
origin Pointoptional缩放的原点。如果未指定,则将围绕格网范围中心缩放格网。
返回值:类型 描述 Mesh 修改后的格网(此实例)。
-
将此类的实例转换为 GeoScene portal JSON 格式。 有关更多信息,请参阅使用 fromJSON() 指南主题。
返回值:类型 描述 Object 此类实例的 GeoScene portal JSON 格式。
-
vertexAttributesChanged()
-
通知需要重新计算依赖于折点属性的任何缓存值。在就地修改折点属性后使用此方法,以便相应地重新计算依赖于这些折点属性的值(例如范围的计算)。