• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# SceneNode
2
3本模块提供3D图形中场景资源结点的类型及操作方法。
4
5> **说明:**
6>
7> 本模块首批接口从API version 12开始支持,后续版本的新增接口,采用上角标标记接口的起始版本。
8
9## 导入模块
10
11```ts
12import { LayerMask, NodeType, Container, Node, Geometry, LightType, Light, SpotLight, DirectionalLight,
13  Camera } from '@kit.ArkGraphics3D';
14```
15
16## LayerMask
17用于定义结点的图层掩码。
18
19### getEnabled
20getEnabled(index: number): boolean
21
22获取指定图层下标图层掩码的使能状态。
23
24**系统能力:** SystemCapability.ArkUi.Graphics3D
25
26**参数:**
27| 参数名 | 类型 | 必填 | 说明 |
28| ---- | ---- | ---- | ---- |
29| index | number | 是 | 要使能图层的下标,值域为大于等于0的整数。 |
30
31**返回值:**
32| 类型 | 说明 |
33| ---- | ---- |
34| boolean | 返回特定下标的图层是否使能。true表示使用图层掩码,false表示不使用。 |
35
36**示例:**
37```ts
38import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
39  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
40
41function layerMask() : void {
42  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));
43  scene.then(async (result: Scene) => {
44    if (result) {
45      let node : Node | null = result.getNodeByPath("rootNode_");
46      if (node) {
47          // 获取掩码的使能状态
48          let enabled: Boolean = node.layerMask.getEnabled(1);
49      }
50    }
51  });
52}
53```
54
55### setEnabled
56
57setEnabled(index: number, enabled: boolean): void
58
59将特定下标的图层掩码使能。
60
61**系统能力:** SystemCapability.ArkUi.Graphics3D
62
63**参数:**
64| 参数名 | 类型 | 必填 | 说明 |
65| ---- | ---- | ---- | ---- |
66| index | number | 是 | 要使能图层的下标,值域为大于等于0的整数。 |
67| enabled | boolean | 是 | 要设置的使能状态。true表示使用图层掩码,false表示不使用。 |
68
69**示例:**
70```ts
71import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
72  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
73
74function layerMask() : void {
75  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));
76  scene.then(async (result: Scene) => {
77    if (result) {
78      let node : Node | null = result.getNodeByPath("rootNode/Scene/");
79      if (node) {
80          // 设置掩码状态
81          node.layerMask.setEnabled(1, true);
82      }
83    }
84  });
85}
86```
87
88## NodeType
89结点类型枚举。
90
91**系统能力:** SystemCapability.ArkUi.Graphics3D
92| 名称 | 值 | 说明 |
93| ---- | ---- | ---- |
94| NODE | 1 | 结点是空结点。 |
95| GEOMETRY | 2 | 几何类型结点。 |
96| CAMERA | 3 | 相机类型结点。 |
97| LIGHT | 4 | 灯光类型结点。 |
98
99## Container\<T>
100定义场景对象的容器。容器提供了一种将场景对象分组到层次结构中的方法。
101
102### append
103append(item: T): void
104
105追加一个对象到容器。
106
107**系统能力:** SystemCapability.ArkUi.Graphics3D
108
109**参数:**
110| 参数名 | 类型 | 必填 | 说明 |
111| ---- | ---- | ---- | ---- |
112| item | T | 是 | T类型对象。 |
113
114**示例:**
115```ts
116import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
117  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
118
119function append() : void {
120  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));
121  scene.then(async (result: Scene) => {
122    if (result) {
123      let node : Node | null = result.getNodeByPath("rootNode/Scene/");
124      // append 节点
125      result.root?.children.get(0)?.children.append(node);
126    }
127  });
128}
129```
130
131
132### insertAfter
133insertAfter(item: T, sibling: T | null): void
134
135在兄弟结点后面插入对象。
136
137**系统能力:** SystemCapability.ArkUi.Graphics3D
138
139**参数:**
140| 参数名 | 类型 | 必填 | 说明 |
141| ---- | ---- | ---- | ---- |
142| item | T | 是 | 要插入结点。 |
143| sibling | T \| null | 是 | 兄弟结点。 |
144
145**示例:**
146```ts
147import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
148  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
149
150function insertAfter() : void {
151  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));
152  scene.then(async (result: Scene) => {
153    if (result) {
154      let node : Node | null = result.getNodeByPath("rootNode/Scene/");
155      // insertAfter 节点
156      result.root?.children.get(0)?.children.insertAfter(node, null);
157    }
158  });
159}
160```
161
162### remove
163remove(item: T): void
164
165移除指定对象。
166
167**系统能力:** SystemCapability.ArkUi.Graphics3D
168
169**参数:**
170| 参数名 | 类型 | 必填 | 说明 |
171| ---- | ---- | ---- | ---- |
172| item | T | 是 | 要移除的对象。 |
173
174**示例:**
175```ts
176import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
177  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
178
179function remove() : void {
180  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));
181  scene.then(async (result: Scene) => {
182    if (result) {
183      let node : Node | null = result.getNodeByPath("rootNode/Scene/");
184      // remove 节点
185      result.root?.children.remove(node);
186    }
187  });
188}
189```
190
191### get
192get(index: number): T | null
193
194获取特定下标对象,获取不到则返回空。
195
196**系统能力:** SystemCapability.ArkUi.Graphics3D
197
198**参数:**
199| 参数名 | 类型 | 必填 | 说明 |
200| ---- | ---- | ---- | ---- |
201| index | number | 是 | 要获取对象的下标,取值范围是大于等于0的整数。 |
202
203**返回值:**
204| 类型 | 说明 |
205| ---- | ---- |
206| T \| null | 返回获取到的对象,获取不到则返回空值。 |
207
208**示例:**
209```ts
210import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
211  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
212
213function get() : void {
214  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));
215  scene.then(async (result: Scene) => {
216    if (result) {
217      let node : Node | null = result.getNodeByPath("rootNode/Scene/");
218      // 从children中get 0号节点
219      result.root?.children.get(0)?.children.insertAfter(node, null);
220    }
221  });
222}
223```
224
225### clear
226clear(): void
227
228清空容器内的所有对象。
229
230**系统能力:** SystemCapability.ArkUi.Graphics3D
231
232**示例:**
233```ts
234import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
235  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
236
237function clear() : void {
238  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));
239  scene.then(async (result: Scene) => {
240    if (result) {
241      let node : Node | null = result.getNodeByPath("rootNode/Scene/");
242      // 清空children节点
243      result.root?.children.clear();
244    }
245  });
246}
247```
248
249### count
250count(): number
251
252获取容器中对象的数量。
253
254**系统能力:** SystemCapability.ArkUi.Graphics3D
255
256**返回值:**
257| 类型 | 说明 |
258| ---- | ---- |
259| number | 返回容器中对象个数,取值范围是非负整数。 |
260
261**示例:**
262```ts
263import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
264  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
265
266function count() : void {
267  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));
268  scene.then(async (result: Scene) => {
269    if (result) {
270      let node : Node | null = result.getNodeByPath("rootNode_");
271      if (node) {
272        let container: Container<Node> = node.children;
273        // 获取children中的节点数
274        let count: number = container.count();
275      }
276    }
277  });
278}
279```
280
281## Node
2823D场景由树状层次结构的结点组成,其中每个结点都实现了Node接口。继承自[SceneResource](js-apis-inner-scene-resources.md#sceneresource)。
283
284### 属性
285
286**系统能力:** SystemCapability.ArkUi.Graphics3D
287
288| 名称 | 类型 | 只读 | 可选 | 说明 |
289| ---- | ---- | ---- | ---- | ---- |
290| position | [Position3](js-apis-inner-scene-types.md#position3) | 否 | 否 | 结点位置。 |
291| rotation | [Quaternion](js-apis-inner-scene-types.md#quaternion) | 否 | 否 | 结点旋转角度。 |
292| scale | [Scale3](js-apis-inner-scene-types.md#scale3) | 否 | 否 | 结点缩放。 |
293| visible | boolean | 否 | 否 | 结点是否可见。true表示该节点可见,false表示不可见。 |
294| nodeType | [NodeType](#nodetype) | 是 | 否 | 结点类型。 |
295| layerMask | [LayerMask](#layermask) | 是 | 否 | 结点的图层掩码。 |
296| path | string | 是 | 否 | 结点路径。 |
297| parent | [Node](#node) \| null | 是 | 否 | 结点的父结点,不存在则为空值。 |
298| children | [Container](js-apis-inner-scene-nodes.md#containert)\<[Node](#node)> | 是 | 否 | 结点的结点,不存在则为空值。 |
299
300### getNodeByPath
301getNodeByPath(path: string): Node | null
302
303根据路径获取结点,如果获取不到则返回空。
304
305**系统能力:** SystemCapability.ArkUi.Graphics3D
306
307**参数:**
308| 参数名 | 类型 | 必填 | 说明 |
309| ---- | ---- | ---- | ---- |
310| path | string | 是 | 场景结点层次中的路径。每层之间使用'/'符号进行分割。|
311
312**返回值:**
313| 类型 | 说明 |
314| ---- | ---- |
315| [Node](#node) \| null | 返回结点对象。 |
316
317**示例:**
318```ts
319import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
320  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
321
322function getNode() : void {
323  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf"));
324  scene.then(async (result: Scene) => {
325    if (result && result.root) {
326      // 查找节点
327      let geo : Node | null = result.root.getNodeByPath("scene/node");
328    }
329  });
330}
331```
332
333## Geometry
334几何类型,继承自[Node](#node)。
335
336### 属性
337
338**系统能力:** SystemCapability.ArkUi.Graphics3D
339
340| 名称 | 类型 | 只读 | 可选 | 说明 |
341| ---- | ---- | ---- | ---- | ---- |
342| mesh | [Mesh](js-apis-inner-scene-resources.md#mesh) | 是 | 否 | 网格属性。 |
343
344
345## LightType
346光源类型枚举。
347
348**系统能力:** SystemCapability.ArkUi.Graphics3D
349
350| 名称 | 值 | 说明 |
351| ---- | ---- | ---- |
352| DIRECTIONAL | 1 | 平行光类型。 |
353| SPOT | 2 | 点光源类型。 |
354
355## Light
356光源,继承自[Node](#node)。
357
358### 属性
359
360**系统能力:** SystemCapability.ArkUi.Graphics3D
361
362| 名称 | 类型 | 只读 | 可选 | 说明 |
363| ---- | ---- | ---- | ---- | ---- |
364| lightType | [LightType](#lighttype) | 是 | 否 | 光源类型。 |
365| color | [Color](js-apis-inner-scene-types.md#color) | 否 | 否 | 颜色。 |
366| intensity | number | 否 | 否 | 光照密度,取值范围是大于0的实数。 |
367| shadowEnabled | boolean | 否 | 否 | 是否使能阴影。true表示添加阴影,false表示没有阴影效果。 |
368| enabled | boolean | 否 | 否 | 是否使能光源。true表示使用光源,false表示不使用。 |
369
370## SpotLight
371点光源类型,继承自[Light](#light)。
372
373**系统能力:** SystemCapability.ArkUi.Graphics3D
374
375## DirectionalLight
376平行光类型,继承自[Light](#light)。
377
378**系统能力:** SystemCapability.ArkUi.Graphics3D
379
380
381## Camera
382相机类型,Camera继承自[Node](#node)。
383
384### 属性
385
386**系统能力:** SystemCapability.ArkUi.Graphics3D
387
388| 名称 | 类型 | 只读 | 可选 | 说明 |
389| ---- | ---- | ---- | ---- | ---- |
390| fov | number | 否 | 否 | 视场,取值在0到π弧度之间。 |
391| nearPlane | number | 否 | 否 | 近平面,取值大于0。 |
392| farPlane | number | 否 | 否 | 远平面,取值大于nearPlane。 |
393| enabled | boolean | 否 | 否 | 是否使能相机。true表示使用相机,false表示不使用相机。 |
394| postProcess | [PostProcessSettings](js-apis-inner-scene-post-process-settings.md#postprocesssettings) \| null | 否 | 否 | 后处理设置。 |
395| clearColor | [Color](js-apis-inner-scene-types.md#color) \| null | 否 | 否 | 将渲染目标(render target)清空后的特定颜色。 |
396