1e41f4b71Sopenharmony_ci# Scene 2e41f4b71Sopenharmony_ci本模块作为ArkGraphics 3D基础模块,提供SceneResourceParamters、SceneNodeParamters等通用数据类型。同时提供glTF模型加载,场景元素、资源创建等基础方法。 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ci> **说明:** 5e41f4b71Sopenharmony_ci> - 本模块首批接口从API version 12开始支持,后续版本的新增接口,采用上角标标记接口的起始版本。 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci## 导入模块 8e41f4b71Sopenharmony_ci```ts 9e41f4b71Sopenharmony_ciimport { SceneResourceParameters, SceneNodeParameters, SceneResourceFactory, Scene } from '@kit.ArkGraphics3D'; 10e41f4b71Sopenharmony_ci``` 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci## SceneResourceParameters 13e41f4b71Sopenharmony_ci场景资源参数对象。包含name和uri。用于提供场景资源的名称以及3D场景所需的资源文件路径。 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 16e41f4b71Sopenharmony_ci| 名称 | 类型 | 只读 | 可选 | 说明 | 17e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | ---- | 18e41f4b71Sopenharmony_ci| name | string | 否 | 否 | 要创建资源的名称,可由开发者自定填写。| 19e41f4b71Sopenharmony_ci| uri | [ResourceStr](../apis-arkui/arkui-ts/ts-types.md#resourcestr) | 否 | 是 | 3D场景所需的资源文件路径。默认值为undefined。| 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ci**示例:** 22e41f4b71Sopenharmony_ci```ts 23e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 24e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 25e41f4b71Sopenharmony_ci 26e41f4b71Sopenharmony_cifunction createShaderPromise() : Promise<Shader> { 27e41f4b71Sopenharmony_ci return new Promise(() => { 28e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 29e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 30e41f4b71Sopenharmony_ci let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci // 创建SceneResourceParameters类型变量并以此创建shader 33e41f4b71Sopenharmony_ci let sceneResourceParameter: SceneResourceParameters = { name: "shaderResource", 34e41f4b71Sopenharmony_ci uri: $rawfile("shaders/custom_shader/custom_material_sample.shader") }; 35e41f4b71Sopenharmony_ci let shader: Promise<Shader> = sceneFactory.createShader(sceneResourceParameter); 36e41f4b71Sopenharmony_ci return shader; 37e41f4b71Sopenharmony_ci }); 38e41f4b71Sopenharmony_ci }); 39e41f4b71Sopenharmony_ci} 40e41f4b71Sopenharmony_ci``` 41e41f4b71Sopenharmony_ci 42e41f4b71Sopenharmony_ci## SceneNodeParameters 43e41f4b71Sopenharmony_ci场景结点参数对象,它用于提供场景结点层次中的名称和路径。 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 46e41f4b71Sopenharmony_ci| 名称 | 类型 | 只读 | 可选 | 说明 | 47e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | ---- | 48e41f4b71Sopenharmony_ci| name | string | 否 | 否 | 要创建的结点名称,可由开发者自定义填写。 49e41f4b71Sopenharmony_ci| path | string | 否 | 是 | 场景结点层次中的路径。用于指定创建的摄影机、灯光或结点在场景结点层次中的放置位置。每层之间使用'/'符号进行分割。如果未提供,则将其设置为根结点的子结点。默认值为undefined。| 50e41f4b71Sopenharmony_ci 51e41f4b71Sopenharmony_ci**示例:** 52e41f4b71Sopenharmony_ci```ts 53e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 54e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 55e41f4b71Sopenharmony_ci 56e41f4b71Sopenharmony_cifunction createNodePromise() : Promise<Node> { 57e41f4b71Sopenharmony_ci return new Promise(() => { 58e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 59e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 60e41f4b71Sopenharmony_ci let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 61e41f4b71Sopenharmony_ci 62e41f4b71Sopenharmony_ci // 创建SceneNodeParameters类型变量并以此创建node 63e41f4b71Sopenharmony_ci let sceneNodeParameter: SceneNodeParameters = { name: "empty_node", 64e41f4b71Sopenharmony_ci path:"/rootNode_/empty_node" }; 65e41f4b71Sopenharmony_ci let node: Promise<Node> = sceneFactory.createNode(sceneNodeParameter); 66e41f4b71Sopenharmony_ci return node; 67e41f4b71Sopenharmony_ci }); 68e41f4b71Sopenharmony_ci }); 69e41f4b71Sopenharmony_ci} 70e41f4b71Sopenharmony_ci``` 71e41f4b71Sopenharmony_ci## SceneResourceFactory 72e41f4b71Sopenharmony_ci用于创建3D场景中资源的接口,例如相机、光源等。 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ci### createCamera 75e41f4b71Sopenharmony_cicreateCamera(params: SceneNodeParameters): Promise\<Camera> 76e41f4b71Sopenharmony_ci 77e41f4b71Sopenharmony_ci根据结点参数创建相机, 使用Promise异步回调。 78e41f4b71Sopenharmony_ci 79e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ci**参数:** 82e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 83e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | 84e41f4b71Sopenharmony_ci| params | [SceneNodeParameters](#scenenodeparameters) | 是 | 场景结点参数。 | 85e41f4b71Sopenharmony_ci 86e41f4b71Sopenharmony_ci**返回值:** 87e41f4b71Sopenharmony_ci| 类型 | 说明 | 88e41f4b71Sopenharmony_ci| ---- | ---- | 89e41f4b71Sopenharmony_ci| Promise\<[Camera](js-apis-inner-scene-nodes.md#camera)> | Promise对象,返回相机对象。 | 90e41f4b71Sopenharmony_ci 91e41f4b71Sopenharmony_ci**示例:** 92e41f4b71Sopenharmony_ci```ts 93e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 94e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 95e41f4b71Sopenharmony_ci 96e41f4b71Sopenharmony_cifunction createCameraPromise() : Promise<Camera> { 97e41f4b71Sopenharmony_ci return new Promise(() => { 98e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 99e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 100e41f4b71Sopenharmony_ci let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 101e41f4b71Sopenharmony_ci let sceneCameraParameter: SceneNodeParameters = { name: "camera1" }; 102e41f4b71Sopenharmony_ci // 创建相机 103e41f4b71Sopenharmony_ci let camera: Promise<Camera> = sceneFactory.createCamera(sceneCameraParameter); 104e41f4b71Sopenharmony_ci return camera; 105e41f4b71Sopenharmony_ci }); 106e41f4b71Sopenharmony_ci }); 107e41f4b71Sopenharmony_ci} 108e41f4b71Sopenharmony_ci``` 109e41f4b71Sopenharmony_ci 110e41f4b71Sopenharmony_ci### createLight 111e41f4b71Sopenharmony_cicreateLight(params: SceneNodeParameters, lightType: LightType): Promise\<Light> 112e41f4b71Sopenharmony_ci 113e41f4b71Sopenharmony_ci根据结点参数和灯光类型创建灯光, 使用Promise异步回调。 114e41f4b71Sopenharmony_ci 115e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 116e41f4b71Sopenharmony_ci 117e41f4b71Sopenharmony_ci**参数:** 118e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 119e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | 120e41f4b71Sopenharmony_ci| params | [SceneNodeParameters](#scenenodeparameters) | 是 | 场景结点参数。 | 121e41f4b71Sopenharmony_ci| lightType | [LightType](js-apis-inner-scene-nodes.md#lighttype) | 是 | 灯光类型。 | 122e41f4b71Sopenharmony_ci 123e41f4b71Sopenharmony_ci**返回值:** 124e41f4b71Sopenharmony_ci| 类型 | 说明 | 125e41f4b71Sopenharmony_ci| ---- | ---- | 126e41f4b71Sopenharmony_ci| Promise\<[Light](js-apis-inner-scene-nodes.md#light)> | Promise对象,返回灯光对象。 | 127e41f4b71Sopenharmony_ci 128e41f4b71Sopenharmony_ci**示例:** 129e41f4b71Sopenharmony_ci```ts 130e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 131e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 132e41f4b71Sopenharmony_ci 133e41f4b71Sopenharmony_cifunction createLightPromise() : Promise<Light> { 134e41f4b71Sopenharmony_ci return new Promise(() => { 135e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 136e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 137e41f4b71Sopenharmony_ci let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 138e41f4b71Sopenharmony_ci let sceneLightParameter: SceneNodeParameters = { name: "light" }; 139e41f4b71Sopenharmony_ci // 创建平行光 140e41f4b71Sopenharmony_ci let light: Promise<Light> = sceneFactory.createLight(sceneLightParameter, LightType.DIRECTIONAL); 141e41f4b71Sopenharmony_ci return light; 142e41f4b71Sopenharmony_ci }); 143e41f4b71Sopenharmony_ci }); 144e41f4b71Sopenharmony_ci} 145e41f4b71Sopenharmony_ci``` 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ci### createNode 148e41f4b71Sopenharmony_cicreateNode(params: SceneNodeParameters): Promise\<Node> 149e41f4b71Sopenharmony_ci 150e41f4b71Sopenharmony_ci创建结点, 使用Promise异步回调。 151e41f4b71Sopenharmony_ci 152e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 153e41f4b71Sopenharmony_ci 154e41f4b71Sopenharmony_ci**参数:** 155e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 156e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | 157e41f4b71Sopenharmony_ci| params | [SceneNodeParameters](#scenenodeparameters) | 是 | 场景结点参数。 | 158e41f4b71Sopenharmony_ci 159e41f4b71Sopenharmony_ci**返回值:** 160e41f4b71Sopenharmony_ci| 类型 | 说明 | 161e41f4b71Sopenharmony_ci| ---- | ---- | 162e41f4b71Sopenharmony_ci| Promise\<[Node](js-apis-inner-scene-nodes.md#node)> | Promise对象,返回结点对象。 | 163e41f4b71Sopenharmony_ci 164e41f4b71Sopenharmony_ci**示例:** 165e41f4b71Sopenharmony_ci```ts 166e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 167e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 168e41f4b71Sopenharmony_ci 169e41f4b71Sopenharmony_cifunction createNodePromise() : Promise<Node> { 170e41f4b71Sopenharmony_ci return new Promise(() => { 171e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 172e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 173e41f4b71Sopenharmony_ci let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 174e41f4b71Sopenharmony_ci let sceneNodeParameter: SceneNodeParameters = { name: "empty_node", 175e41f4b71Sopenharmony_ci path:"/rootNode_/empty_node" }; 176e41f4b71Sopenharmony_ci // 创建节点 177e41f4b71Sopenharmony_ci let node: Promise<Node> = sceneFactory.createNode(sceneNodeParameter); 178e41f4b71Sopenharmony_ci return node; 179e41f4b71Sopenharmony_ci }); 180e41f4b71Sopenharmony_ci }); 181e41f4b71Sopenharmony_ci} 182e41f4b71Sopenharmony_ci``` 183e41f4b71Sopenharmony_ci 184e41f4b71Sopenharmony_ci### createMaterial 185e41f4b71Sopenharmony_cicreateMaterial(params: SceneResourceParameters, materialType: MaterialType): Promise\<Material> 186e41f4b71Sopenharmony_ci 187e41f4b71Sopenharmony_ci根据场景资源参数和材质类型创建材质, 使用Promise异步回调。 188e41f4b71Sopenharmony_ci 189e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 190e41f4b71Sopenharmony_ci 191e41f4b71Sopenharmony_ci**参数:** 192e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 193e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | 194e41f4b71Sopenharmony_ci| params | [SceneResourceParameters](#sceneresourceparameters) | 是 | 场景资源参数。 | 195e41f4b71Sopenharmony_ci| materialType | [MaterialType](js-apis-inner-scene-resources.md#materialtype) | 是 | 材质类型。 | 196e41f4b71Sopenharmony_ci 197e41f4b71Sopenharmony_ci**返回值:** 198e41f4b71Sopenharmony_ci| 类型 | 说明 | 199e41f4b71Sopenharmony_ci| ---- | ---- | 200e41f4b71Sopenharmony_ci| Promise\<[Material](js-apis-inner-scene-resources.md#material)> | Promise对象,返回材质对象。| 201e41f4b71Sopenharmony_ci 202e41f4b71Sopenharmony_ci**示例:** 203e41f4b71Sopenharmony_ci```ts 204e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 205e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 206e41f4b71Sopenharmony_ci 207e41f4b71Sopenharmony_cifunction createMaterialPromise() : Promise<Material> { 208e41f4b71Sopenharmony_ci return new Promise(() => { 209e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 210e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 211e41f4b71Sopenharmony_ci let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 212e41f4b71Sopenharmony_ci let sceneMaterialParameter: SceneResourceParameters = { name: "material" }; 213e41f4b71Sopenharmony_ci // 创建材质 214e41f4b71Sopenharmony_ci let material: Promise<Material> = sceneFactory.createMaterial(sceneMaterialParameter, MaterialType.SHADER); 215e41f4b71Sopenharmony_ci return material; 216e41f4b71Sopenharmony_ci }); 217e41f4b71Sopenharmony_ci }); 218e41f4b71Sopenharmony_ci} 219e41f4b71Sopenharmony_ci``` 220e41f4b71Sopenharmony_ci 221e41f4b71Sopenharmony_ci### createShader 222e41f4b71Sopenharmony_cicreateShader(params: SceneResourceParameters): Promise\<Shader> 223e41f4b71Sopenharmony_ci 224e41f4b71Sopenharmony_ci根据场景资源参数创建着色器, 使用Promise异步回调。 225e41f4b71Sopenharmony_ci 226e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 227e41f4b71Sopenharmony_ci 228e41f4b71Sopenharmony_ci**参数:** 229e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 230e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | 231e41f4b71Sopenharmony_ci| params | [SceneResourceParameters](#sceneresourceparameters) | 是 | 场景资源参数。 | 232e41f4b71Sopenharmony_ci 233e41f4b71Sopenharmony_ci**返回值:** 234e41f4b71Sopenharmony_ci| 类型 | 说明 | 235e41f4b71Sopenharmony_ci| ---- | ---- | 236e41f4b71Sopenharmony_ci| Promise\<[Shader](js-apis-inner-scene-resources.md#shader)> | Promise对象,返回着色器对象。 | 237e41f4b71Sopenharmony_ci 238e41f4b71Sopenharmony_ci**示例:** 239e41f4b71Sopenharmony_ci```ts 240e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 241e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 242e41f4b71Sopenharmony_ci 243e41f4b71Sopenharmony_cifunction createShaderPromise() : Promise<Shader> { 244e41f4b71Sopenharmony_ci return new Promise(() => { 245e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 246e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 247e41f4b71Sopenharmony_ci let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 248e41f4b71Sopenharmony_ci let sceneResourceParameter: SceneResourceParameters = { name: "shaderResource", 249e41f4b71Sopenharmony_ci uri: $rawfile("shaders/custom_shader/custom_material_sample.shader") }; 250e41f4b71Sopenharmony_ci // 创建shader 251e41f4b71Sopenharmony_ci let shader: Promise<Shader> = sceneFactory.createShader(sceneResourceParameter); 252e41f4b71Sopenharmony_ci return shader; 253e41f4b71Sopenharmony_ci }); 254e41f4b71Sopenharmony_ci }); 255e41f4b71Sopenharmony_ci} 256e41f4b71Sopenharmony_ci``` 257e41f4b71Sopenharmony_ci 258e41f4b71Sopenharmony_ci 259e41f4b71Sopenharmony_ci### createImage 260e41f4b71Sopenharmony_cicreateImage(params: SceneResourceParameters): Promise\<Image> 261e41f4b71Sopenharmony_ci 262e41f4b71Sopenharmony_ci创建图片资源, 使用Promise异步回调。 263e41f4b71Sopenharmony_ci 264e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 265e41f4b71Sopenharmony_ci 266e41f4b71Sopenharmony_ci**参数:** 267e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 268e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | 269e41f4b71Sopenharmony_ci| params | [SceneResourceParameters](#sceneresourceparameters) | 是 | 场景资源参数。 | 270e41f4b71Sopenharmony_ci 271e41f4b71Sopenharmony_ci**返回值:** 272e41f4b71Sopenharmony_ci| 类型 | 说明 | 273e41f4b71Sopenharmony_ci| ---- | ---- | 274e41f4b71Sopenharmony_ci| Promise\<[Image](js-apis-inner-scene-resources.md#image)> | Promise对象,返回图片对象。 | 275e41f4b71Sopenharmony_ci 276e41f4b71Sopenharmony_ci**示例:** 277e41f4b71Sopenharmony_ci```ts 278e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 279e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 280e41f4b71Sopenharmony_ci 281e41f4b71Sopenharmony_cifunction createImagePromise() : Promise<Image> { 282e41f4b71Sopenharmony_ci return new Promise(() => { 283e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 284e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 285e41f4b71Sopenharmony_ci let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 286e41f4b71Sopenharmony_ci let sceneImageParameter: SceneResourceParameters = { name: "image", uri: $rawfile("bricks.jpg") }; 287e41f4b71Sopenharmony_ci // 创建Image 288e41f4b71Sopenharmony_ci let image: Promise<Image> = sceneFactory.createImage(sceneImageParameter); 289e41f4b71Sopenharmony_ci return image; 290e41f4b71Sopenharmony_ci }); 291e41f4b71Sopenharmony_ci }); 292e41f4b71Sopenharmony_ci} 293e41f4b71Sopenharmony_ci``` 294e41f4b71Sopenharmony_ci 295e41f4b71Sopenharmony_ci### createEnvironment 296e41f4b71Sopenharmony_cicreateEnvironment(params: SceneResourceParameters): Promise\<Environment> 297e41f4b71Sopenharmony_ci 298e41f4b71Sopenharmony_ci根据场景资源参数创建环境, 使用Promise异步回调。 299e41f4b71Sopenharmony_ci 300e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 301e41f4b71Sopenharmony_ci 302e41f4b71Sopenharmony_ci**参数:** 303e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 304e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | 305e41f4b71Sopenharmony_ci| params | [SceneResourceParameters](#sceneresourceparameters) | 是 | 场景资源参数。 | 306e41f4b71Sopenharmony_ci 307e41f4b71Sopenharmony_ci**返回值:** 308e41f4b71Sopenharmony_ci| 类型 | 说明 | 309e41f4b71Sopenharmony_ci| ---- | ---- | 310e41f4b71Sopenharmony_ci| Promise\<[Environment](js-apis-inner-scene-resources.md#environment)> | Promise对象,返回环境对象。 | 311e41f4b71Sopenharmony_ci 312e41f4b71Sopenharmony_ci**示例:** 313e41f4b71Sopenharmony_ci```ts 314e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 315e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 316e41f4b71Sopenharmony_ci 317e41f4b71Sopenharmony_cifunction createEnvironmentPromise() : Promise<Environment> { 318e41f4b71Sopenharmony_ci return new Promise(() => { 319e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 320e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 321e41f4b71Sopenharmony_ci let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 322e41f4b71Sopenharmony_ci let sceneEnvironmentParameter: SceneResourceParameters = { name: "env", uri: $rawfile("bricks.ktx") }; 323e41f4b71Sopenharmony_ci // 创建Environment 324e41f4b71Sopenharmony_ci let env: Promise<Environment> = sceneFactory.createEnvironment(sceneEnvironmentParameter); 325e41f4b71Sopenharmony_ci return env; 326e41f4b71Sopenharmony_ci }); 327e41f4b71Sopenharmony_ci }); 328e41f4b71Sopenharmony_ci} 329e41f4b71Sopenharmony_ci``` 330e41f4b71Sopenharmony_ci 331e41f4b71Sopenharmony_ci## Scene 332e41f4b71Sopenharmony_ci用于设置场景。 333e41f4b71Sopenharmony_ci 334e41f4b71Sopenharmony_ci### 属性 335e41f4b71Sopenharmony_ci 336e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 337e41f4b71Sopenharmony_ci 338e41f4b71Sopenharmony_ci| 名称 | 类型 | 只读 | 可选 | 说明 | 339e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | ---- | 340e41f4b71Sopenharmony_ci| environment | [Environment](js-apis-inner-scene-resources.md#environment) | 否 | 否 | 环境对象。 | 341e41f4b71Sopenharmony_ci| animations | [Animation](js-apis-inner-scene-resources.md#animation)[] | 是 | 否 | 动画数组。 用于保存3D场景中的动画对象。| 342e41f4b71Sopenharmony_ci| root | [Node](js-apis-inner-scene-nodes.md#node) \| null | 是 | 否 | 3D场景树根结点。 | 343e41f4b71Sopenharmony_ci 344e41f4b71Sopenharmony_ci### load 345e41f4b71Sopenharmony_cistatic load(uri?: ResourceStr): Promise\<Scene> 346e41f4b71Sopenharmony_ci 347e41f4b71Sopenharmony_ci通过传入的资源路径加载资源。 348e41f4b71Sopenharmony_ci 349e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 350e41f4b71Sopenharmony_ci 351e41f4b71Sopenharmony_ci**参数:** 352e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 353e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | 354e41f4b71Sopenharmony_ci| uri | [ResourceStr](../apis-arkui/arkui-ts/ts-types.md#resourcestr) | 否 | 待加载的模型文件资源路径,默认值为undefined。| 355e41f4b71Sopenharmony_ci 356e41f4b71Sopenharmony_ci**返回值:** 357e41f4b71Sopenharmony_ci| 类型 | 说明 | 358e41f4b71Sopenharmony_ci| ---- | ---- | 359e41f4b71Sopenharmony_ci| Promise\<[Scene](#scene)> | Promise对象,返回场景对象。| 360e41f4b71Sopenharmony_ci 361e41f4b71Sopenharmony_ci**示例:** 362e41f4b71Sopenharmony_ci```ts 363e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 364e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 365e41f4b71Sopenharmony_ci 366e41f4b71Sopenharmony_cifunction loadModel() : void { 367e41f4b71Sopenharmony_ci // 加载模型 368e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 369e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => {}); 370e41f4b71Sopenharmony_ci} 371e41f4b71Sopenharmony_ci``` 372e41f4b71Sopenharmony_ci 373e41f4b71Sopenharmony_ci### getNodeByPath 374e41f4b71Sopenharmony_cigetNodeByPath(path: string, type?: NodeType): Node | null 375e41f4b71Sopenharmony_ci 376e41f4b71Sopenharmony_ci通过路径获取结点。 377e41f4b71Sopenharmony_ci 378e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 379e41f4b71Sopenharmony_ci 380e41f4b71Sopenharmony_ci**参数:** 381e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 382e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | 383e41f4b71Sopenharmony_ci| path | string | 是 | 场景结点层次中的路径。每层之间使用'/'符号进行分割。| 384e41f4b71Sopenharmony_ci| type | [NodeType](js-apis-inner-scene-nodes.md#nodetype) | 否 | 预期返回的结点类型。默认值为空。| 385e41f4b71Sopenharmony_ci 386e41f4b71Sopenharmony_ci**返回值:** 387e41f4b71Sopenharmony_ci| 类型 | 说明 | 388e41f4b71Sopenharmony_ci| ---- | ---- | 389e41f4b71Sopenharmony_ci| [Node](js-apis-inner-scene-nodes.md#node) \| null | 返回请求结点的实例,如果没有找到或者找到的节点类型与传入的参数不相符则返回空。 | 390e41f4b71Sopenharmony_ci 391e41f4b71Sopenharmony_ci**示例:** 392e41f4b71Sopenharmony_ci```ts 393e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 394e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 395e41f4b71Sopenharmony_ci 396e41f4b71Sopenharmony_cifunction getNode() : void { 397e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 398e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 399e41f4b71Sopenharmony_ci if (result) { 400e41f4b71Sopenharmony_ci // 寻找指定路径的节点 401e41f4b71Sopenharmony_ci let node : Node | null = result.getNodeByPath("rootNode_"); 402e41f4b71Sopenharmony_ci } 403e41f4b71Sopenharmony_ci }); 404e41f4b71Sopenharmony_ci} 405e41f4b71Sopenharmony_ci``` 406e41f4b71Sopenharmony_ci 407e41f4b71Sopenharmony_ci### getResourceFactory 408e41f4b71Sopenharmony_cigetResourceFactory(): SceneResourceFactory 409e41f4b71Sopenharmony_ci 410e41f4b71Sopenharmony_ci获取场景资源工厂对象。 411e41f4b71Sopenharmony_ci 412e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 413e41f4b71Sopenharmony_ci 414e41f4b71Sopenharmony_ci**返回值:** 415e41f4b71Sopenharmony_ci| 类型 | 说明 | 416e41f4b71Sopenharmony_ci| ---- | ---- | 417e41f4b71Sopenharmony_ci| [SceneResourceFactory](js-apis-inner-scene.md#sceneresourcefactory)| 返回场景资源工厂对象。 | 418e41f4b71Sopenharmony_ci 419e41f4b71Sopenharmony_ci**示例:** 420e41f4b71Sopenharmony_ci```ts 421e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 422e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 423e41f4b71Sopenharmony_ci 424e41f4b71Sopenharmony_cifunction getFactory() : void { 425e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 426e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 427e41f4b71Sopenharmony_ci if (result) { 428e41f4b71Sopenharmony_ci // 获得SceneResourceFactory对象 429e41f4b71Sopenharmony_ci let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 430e41f4b71Sopenharmony_ci } 431e41f4b71Sopenharmony_ci }); 432e41f4b71Sopenharmony_ci} 433e41f4b71Sopenharmony_ci``` 434e41f4b71Sopenharmony_ci 435e41f4b71Sopenharmony_ci### destroy 436e41f4b71Sopenharmony_cidestroy(): void 437e41f4b71Sopenharmony_ci 438e41f4b71Sopenharmony_ci销毁场景,释放所有的场景资源。 439e41f4b71Sopenharmony_ci 440e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D 441e41f4b71Sopenharmony_ci 442e41f4b71Sopenharmony_ci**示例:** 443e41f4b71Sopenharmony_ci```ts 444e41f4b71Sopenharmony_ciimport { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 445e41f4b71Sopenharmony_ci LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D'; 446e41f4b71Sopenharmony_ci 447e41f4b71Sopenharmony_cifunction destroy() : void { 448e41f4b71Sopenharmony_ci let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.gltf")); 449e41f4b71Sopenharmony_ci scene.then(async (result: Scene) => { 450e41f4b71Sopenharmony_ci if (result) { 451e41f4b71Sopenharmony_ci // 销毁scene 452e41f4b71Sopenharmony_ci result.destroy(); 453e41f4b71Sopenharmony_ci } 454e41f4b71Sopenharmony_ci }); 455e41f4b71Sopenharmony_ci} 456e41f4b71Sopenharmony_ci``` 457