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