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