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