• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Scene
2<!--Kit: ArkGraphics 3D-->
3<!--Subsystem: Graphics-->
4<!--Owner: @zzhao0-->
5<!--Designer: @zdustc-->
6<!--Tester: @zhangyue283-->
7<!--Adviser: @ge-yafang-->
8
9本模块作为ArkGraphics 3D基础模块,提供SceneResourceParameters、SceneNodeParameters等通用数据类型。同时提供glTF模型加载,场景元素、资源创建等基础方法。
10
11> **说明:**
12> - 本模块首批接口从API version 12开始支持,后续版本的新增接口,采用上角标标记接口的起始版本。
13> - 关于`.shader`资源文件,具体请见[.shader资源文件格式要求](../../graphics3d/arkgraphics3D-shader-resource.md)。
14
15## 导入模块
16```ts
17import { SceneResourceParameters, SceneNodeParameters, RaycastResult, RaycastParameters,RenderResourceFactory,
18  SceneResourceFactory, SceneComponent, RenderContext, RenderParameters, Scene } from '@kit.ArkGraphics3D';
19```
20
21## SceneResourceParameters
22场景资源参数对象,包含name和uri,用于提供场景资源的名称以及3D场景所需的资源文件路径。
23
24**系统能力:** SystemCapability.ArkUi.Graphics3D
25| 名称 | 类型 | 只读 | 可选 | 说明 |
26| ---- | ---- | ---- | ---- | ---- |
27| name | string | 否 | 否 | 要创建资源的名称,可由开发者自定填写,用于标识该场景资源。|
28| uri | [ResourceStr](../apis-arkui/arkui-ts/ts-types.md#resourcestr) | 否 | 是 | 3D场景所需的资源文件路径。默认值为undefined。|
29
30**示例:**
31```ts
32import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
33  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
34
35function createShaderPromise(): Promise<Shader> {
36  return new Promise((resolve, reject) => {
37    // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
38    let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
39    scene.then(async (result: Scene) => {
40      let sceneFactory: SceneResourceFactory = result.getResourceFactory();
41
42      // 创建shader资源(通过SceneResourceParameters配置),路径和文件名可根据项目实际资源自定义
43      let sceneResourceParameter: SceneResourceParameters = { name: "shaderResource",
44        uri: $rawfile("shaders/custom_shader/custom_material_sample.shader") };
45      let shader: Shader = await sceneFactory.createShader(sceneResourceParameter);
46      resolve(shader);
47    }).catch((error: Error) => {
48      console.error('Scene load failed:', error);
49      reject(error);
50    });
51  });
52}
53```
54
55## SceneNodeParameters
56场景结点参数对象,它用于提供场景结点层次中的名称和路径。
57
58**系统能力:** SystemCapability.ArkUi.Graphics3D
59| 名称 | 类型 | 只读 | 可选 | 说明 |
60| ---- | ---- | ---- | ---- | ---- |
61| name | string | 否 | 否 | 要创建的结点名称,可由开发者自定义填写,用于标识场景结点。|
62| path | string | 否 | 是 | 场景结点层次中的路径。用于指定创建的摄影机、灯光或结点在场景结点层次中的放置位置。每层之间使用'/'符号进行分割。如果未提供,则将其设置为根结点的子结点。默认值为undefined。|
63
64**示例:**
65```ts
66import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
67  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
68
69function createNodePromise() : Promise<Node> {
70  return new Promise((resolve, reject) => {
71    // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
72    let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
73    scene.then(async (result: Scene) => {
74      let sceneFactory: SceneResourceFactory = result.getResourceFactory();
75
76      // 创建SceneNodeParameters类型变量并以此创建node
77      let sceneNodeParameter: SceneNodeParameters = { name: "empty_node",
78        path:"/rootNode_/empty_node" };
79      let node: Node = await sceneFactory.createNode(sceneNodeParameter);
80      resolve(node);
81    }).catch((error: Error) => {
82      console.error('Scene load failed:', error);
83      reject(error);
84    });
85  });
86}
87```
88
89## RaycastResult<sup>20+</sup>
90射线检测命中结果对象,包含被射线击中的3D物体详细信息。
91
92**系统能力:** SystemCapability.ArkUi.Graphics3D
93| 名称 | 类型 | 只读 | 可选 | 说明 |
94| ---- | ---- | ---- | ---- | ---- |
95| node | [Node](js-apis-inner-scene-nodes.md#node) | 是 | 否 | 被射线击中的3D场景节点,可通过该节点操作目标物体(如移动、旋转、隐藏)。 |
96| centerDistance | number | 是 | 否 | 命中物体包围盒中心到摄像机中心的距离,取值范围大于0。 |
97| hitPosition | [Position3](js-apis-inner-scene-types.md#position3) | 是 | 否 | 射线与物体碰撞点的精确世界坐标({x: number, y: number, z: number})。 |
98
99
100## RaycastParameters<sup>20+</sup>
101射线检测参数配置,用于定义射线检测的行为。
102
103**系统能力:** SystemCapability.ArkUi.Graphics3D
104| 名称 | 类型 | 只读 | 可选 | 说明 |
105| ---- | ---- | ---- | ---- | ---- |
106| rootNode | [Node](js-apis-inner-scene-nodes.md#node) | 否 | 是 | 限定检测范围:仅检测该节点及其子节点。未设置时检测全场景。 |
107
108
109## RenderResourceFactory<sup>20+</sup>
110用于创建可在共享RenderContext的多个场景(Scene)中共享的渲染资源。
111
112### createShader<sup>20+</sup>
113createShader(params: SceneResourceParameters): Promise\<Shader>
114
115根据指定场景资源参数创建一个着色器,使用Promise异步回调。
116
117**系统能力:** SystemCapability.ArkUi.Graphics3D
118
119**参数:**
120| 参数名 | 类型 | 必填 | 说明 |
121| ---- | ---- | ---- | ---- |
122| params | [SceneResourceParameters](#sceneresourceparameters) | 是 | 创建着色器的参数。详细`.shader`文件格式请参考[.shader资源文件格式要求](../../graphics3d/arkgraphics3D-shader-resource.md)。 |
123
124**返回值:**
125| 类型 | 说明 |
126| ---- | ---- |
127| Promise\<[Shader](js-apis-inner-scene-resources.md#shader)> | Promise对象,返回创建的着色器对象。 |
128
129**示例:**
130```ts
131import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
132  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, RenderContext, RenderResourceFactory } from '@kit.ArkGraphics3D';
133
134function createShaderResource(): Promise<Shader> {
135  const renderContext: RenderContext | null = Scene.getDefaultRenderContext();
136  if (!renderContext) {
137    return Promise.reject(new Error("RenderContext is null"));
138  }
139  const renderResourceFactory: RenderResourceFactory = renderContext.getRenderResourceFactory();
140  // 创建shader资源,路径和文件名可根据项目实际资源自定义
141  let shaderParams: SceneResourceParameters = {
142    name: "custom_shader",
143    uri: $rawfile("shaders/custom_shader/custom_material_sample.shader")
144  };
145  return renderResourceFactory.createShader(shaderParams);
146}
147```
148
149### createImage<sup>20+</sup>
150createImage(params: SceneResourceParameters): Promise\<Image>
151
152根据指定场景资源参数创建一个图像资源,使用Promise异步回调。
153
154**系统能力:** SystemCapability.ArkUi.Graphics3D
155
156**参数:**
157| 参数名 | 类型 | 必填 | 说明 |
158| ---- | ---- | ---- | ---- |
159| params | [SceneResourceParameters](#sceneresourceparameters) | 是 | 创建图像的参数。 |
160
161**返回值:**
162| 类型 | 说明 |
163| ---- | ---- |
164| Promise\<[Image](js-apis-inner-scene-resources.md#image)> | Promise对象,返回创建的图像对象。 |
165
166**示例:**
167```ts
168import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
169  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, RenderContext, RenderResourceFactory } from '@kit.ArkGraphics3D';
170
171function createImageResource(): Promise<Image> {
172  const renderContext: RenderContext | null = Scene.getDefaultRenderContext();
173  if (!renderContext) {
174    return Promise.reject(new Error("RenderContext is null"));
175  }
176  const renderResourceFactory: RenderResourceFactory = renderContext.getRenderResourceFactory();
177  // 加载图片资源,路径和文件名可根据项目实际资源自定义
178  let imageParams: SceneResourceParameters = {
179    name: "sampleImage",
180    uri: $rawfile("image/Cube_BaseColor.png")
181  };
182  return renderResourceFactory.createImage(imageParams);
183}
184```
185
186### createMesh<sup>20+</sup>
187createMesh(params: SceneResourceParameters, geometry: GeometryDefinition): Promise\<MeshResource>
188
189根据指定场景资源参数和几何体定义(GeometryDefinition)创建一个网格资源(MeshResource),使用Promise异步回调。
190
191**系统能力:** SystemCapability.ArkUi.Graphics3D
192
193**参数:**
194| 参数名 | 类型 | 必填 | 说明 |
195| ---- | ---- | ---- | ---- |
196| params | [SceneResourceParameters](#sceneresourceparameters) | 是 | 创建网格资源的参数。 |
197| geometry | [GeometryDefinition](js-apis-inner-scene-types.md#geometrydefinition18) | 是 | 几何形状定义,描述要创建的网格形状。 |
198
199**返回值:**
200| 类型 | 说明 |
201| ---- | ---- |
202| Promise\<[MeshResource](js-apis-inner-scene-resources.md#meshresource18)> | Promise对象,返回创建的网格资源对象。 |
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';
208import { CustomGeometry, PrimitiveTopology, RenderContext, RenderResourceFactory,
209  MeshResource } from '@ohos.graphics.scene';
210
211function createMeshResource(): Promise<MeshResource> {
212  const renderContext: RenderContext | null = Scene.getDefaultRenderContext();
213  if (!renderContext) {
214    return Promise.reject(new Error("RenderContext is null"));
215  }
216  const renderResourceFactory: RenderResourceFactory = renderContext.getRenderResourceFactory();
217  const geometry = new CustomGeometry();
218  geometry.vertices = [
219    { x: 0, y: 0, z: 0 },
220    { x: 1, y: 0, z: 0 },
221    { x: 1, y: 1, z: 0 },
222    { x: 0, y: 1, z: 0 },
223    { x: 0, y: 0, z: 1 },
224    { x: 1, y: 0, z: 1 },
225    { x: 1, y: 1, z: 1 },
226    { x: 0, y: 1, z: 1 }
227  ];
228  geometry.indices = [
229    0, 1, 2, 2, 3, 0,     // front
230    4, 5, 6, 6, 7, 4,     // back
231    0, 4, 5, 5, 1, 0,     // bottom
232    1, 5, 6, 6, 2, 1,     // right
233    3, 2, 6, 6, 7, 3,     // top
234    3, 7, 4, 4, 0, 3      // left
235  ];
236  geometry.topology = PrimitiveTopology.TRIANGLE_LIST;
237  geometry.normals = [
238    { x: 0, y: 0, z: 1 },
239    { x: 0, y: 0, z: 1 },
240    { x: 0, y: 0, z: 1 },
241    { x: 0, y: 0, z: 1 },
242    { x: 0, y: 0, z: 1 },
243    { x: 0, y: 0, z: 1 },
244    { x: 0, y: 0, z: 1 },
245    { x: 0, y: 0, z: 1 }
246  ];
247  geometry.uvs = [
248    { x: 0, y: 0 },
249    { x: 1, y: 0 },
250    { x: 1, y: 1 },
251    { x: 0, y: 1 },
252    { x: 0, y: 0 },
253    { x: 1, y: 0 },
254    { x: 1, y: 1 },
255    { x: 0, y: 1 }
256  ];
257  geometry.colors = [
258    { r: 1, g: 0, b: 0, a: 1 },
259    { r: 0, g: 1, b: 0, a: 1 },
260    { r: 0, g: 0, b: 1, a: 1 },
261    { r: 1, g: 1, b: 0, a: 1 },
262    { r: 1, g: 0, b: 1, a: 1 },
263    { r: 0, g: 1, b: 1, a: 1 },
264    { r: 1, g: 1, b: 1, a: 1 },
265    { r: 0, g: 0, b: 0, a: 1 }
266  ];
267  // 加载图片资源,路径和文件名可根据项目实际资源自定义
268  let sceneResourceParameter: SceneResourceParameters = {
269    name: "cubeMesh",
270    uri: $rawfile("image/Cube_BaseColor.png")
271  };
272  return renderResourceFactory.createMesh(sceneResourceParameter, geometry);
273}
274```
275
276### createSampler<sup>20+</sup>
277createSampler(params:SceneResourceParameters): Promise\<Sampler>
278
279根据指定场景资源参数创建一个采样器资源,使用Promise异步回调。
280
281**系统能力:** SystemCapability.ArkUi.Graphics3D
282
283**参数:**
284| 参数名 | 类型 | 必填 | 说明 |
285| ---- | ---- | ---- | ---- |
286| params | [SceneResourceParameters](#sceneresourceparameters) | 是 | 创建采样器的参数。 |
287
288**返回值:**
289| 类型 | 说明 |
290| ---- | ---- |
291| Promise\<[Sampler](js-apis-inner-scene-resources.md#sampler20)> | Promise对象,返回创建的采样器对象。 |
292
293**示例:**
294```ts
295import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
296  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, RenderContext, RenderResourceFactory,
297  Sampler } from '@kit.ArkGraphics3D';
298
299function createSamplerResource(): Promise<Sampler> {
300  const renderContext: RenderContext | null = Scene.getDefaultRenderContext();
301  if (!renderContext) {
302    return Promise.reject(new Error("RenderContext is null"));
303  }
304  const renderResourceFactory: RenderResourceFactory = renderContext.getRenderResourceFactory();
305  // 加载图片资源,路径和文件名可根据项目实际资源自定义
306  let samplerParams: SceneResourceParameters = {
307    name: "sampler1",
308    uri: $rawfile("image/Cube_BaseColor.png")
309  };
310  return renderResourceFactory.createSampler(samplerParams);
311}
312```
313
314### createScene<sup>20+</sup>
315createScene(uri?: ResourceStr): Promise\<Scene>
316
317从指定的资源URI创建一个新的场景。如果不指定URI,则创建一个空场景,使用Promise异步回调。
318
319**系统能力:** SystemCapability.ArkUi.Graphics3D
320
321**参数:**
322| 参数名 | 类型 | 必填 | 说明 |
323| ---- | ---- | ---- | ---- |
324| uri | [ResourceStr](../apis-arkui/arkui-ts/ts-types.md#resourcestr) | 否 | 创建场景使用的资源路径,如果未传入资源路径,则默认创建一个空场景。 |
325
326**返回值:**
327| 类型 | 说明 |
328| ---- | ---- |
329| Promise\<[Scene](#scene-1)> | Promise对象,返回创建的场景对象。 |
330
331**示例:**
332```ts
333import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
334  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
335import { RenderContext, RenderResourceFactory } from '@ohos.graphics.scene';
336
337// fromFile=true:从指定glb文件加载场景,fromFile=false:创建一个空场景,此参数是为了示例展示两种常见场景创建方式
338function createScenePromise(fromFile: boolean = false): Promise<Scene> {
339  const renderContext: RenderContext | null = Scene.getDefaultRenderContext();
340  if (!renderContext) {
341    return Promise.reject(new Error("RenderContext is null"));
342  }
343
344  const renderResourceFactory: RenderResourceFactory = renderContext.getRenderResourceFactory();
345  if (fromFile) {
346    // 创建场景并加载.gltf或.glb文件作为初始内容,路径和名称可根据项目实际资源自定义
347    return renderResourceFactory.createScene($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
348  } else {
349    // 创建空场景
350    return renderResourceFactory.createScene();
351  }
352}
353```
354
355## SceneResourceFactory
356用于创建3D场景中资源的接口,例如相机、光源等,继承自[RenderResourceFactory](#renderresourcefactory20)。
357
358### createCamera
359createCamera(params: SceneNodeParameters): Promise\<Camera>
360
361根据结点参数创建相机,使用Promise异步回调。
362
363**系统能力:** SystemCapability.ArkUi.Graphics3D
364
365**参数:**
366| 参数名 | 类型 | 必填 | 说明 |
367| ---- | ---- | ---- | ---- |
368| params | [SceneNodeParameters](#scenenodeparameters) | 是 | 场景结点参数。 |
369
370**返回值:**
371| 类型 | 说明 |
372| ---- | ---- |
373| Promise\<[Camera](js-apis-inner-scene-nodes.md#camera)> | Promise对象,返回相机对象。 |
374
375**示例:**
376```ts
377import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
378  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
379
380function createCameraPromise(): Promise<Camera> {
381  return new Promise((resolve, reject) => {
382    // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
383    let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
384    scene.then(async (result: Scene) => {
385      let sceneFactory: SceneResourceFactory = result.getResourceFactory();
386      let sceneCameraParameter: SceneNodeParameters = { name: "camera1" };
387      // 创建相机
388      let camera: Camera = await sceneFactory.createCamera(sceneCameraParameter);
389      resolve(camera);
390    }).catch((error: Error) => {
391      console.error('Scene load failed:', error);
392      reject(error);
393    });
394  });
395}
396```
397
398### createLight
399createLight(params: SceneNodeParameters, lightType: LightType): Promise\<Light>
400
401根据结点参数和灯光类型创建灯光,使用Promise异步回调。
402
403**系统能力:** SystemCapability.ArkUi.Graphics3D
404
405**参数:**
406| 参数名 | 类型 | 必填 | 说明 |
407| ---- | ---- | ---- | ---- |
408| params | [SceneNodeParameters](#scenenodeparameters) | 是 | 场景结点参数。 |
409| lightType | [LightType](js-apis-inner-scene-nodes.md#lighttype) | 是 | 灯光类型。 |
410
411**返回值:**
412| 类型 | 说明 |
413| ---- | ---- |
414| Promise\<[Light](js-apis-inner-scene-nodes.md#light)> | Promise对象,返回灯光对象。 |
415
416**示例:**
417```ts
418import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
419  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
420
421function createLightPromise() : Promise<Light> {
422  return new Promise((resolve, reject) => {
423    // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
424    let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
425    scene.then(async (result: Scene) => {
426      let sceneFactory: SceneResourceFactory = result.getResourceFactory();
427      let sceneLightParameter: SceneNodeParameters = { name: "light" };
428      // 创建平行光
429      let light: Light = await sceneFactory.createLight(sceneLightParameter, LightType.DIRECTIONAL);
430      resolve(light);
431    }).catch((error: Error) => {
432      console.error('Scene load failed:', error);
433      reject(error);
434    });
435  });
436}
437```
438
439### createNode
440createNode(params: SceneNodeParameters): Promise\<Node>
441
442创建结点,使用Promise异步回调。
443
444**系统能力:** SystemCapability.ArkUi.Graphics3D
445
446**参数:**
447| 参数名 | 类型 | 必填 | 说明 |
448| ---- | ---- | ---- | ---- |
449| params | [SceneNodeParameters](#scenenodeparameters) | 是 | 场景结点参数。 |
450
451**返回值:**
452| 类型 | 说明 |
453| ---- | ---- |
454| Promise\<[Node](js-apis-inner-scene-nodes.md#node)> | Promise对象,返回结点对象。 |
455
456**示例:**
457```ts
458import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
459  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
460
461function createNodePromise(): Promise<Node> {
462  return new Promise((resolve, reject) => {
463    // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
464    let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
465    scene.then(async (result: Scene) => {
466      let sceneFactory: SceneResourceFactory = result.getResourceFactory();
467      let sceneNodeParameter: SceneNodeParameters = { name: "empty_node",
468        path:"/rootNode_/empty_node" };
469      // 创建节点
470      let node: Node = await sceneFactory.createNode(sceneNodeParameter);
471      resolve(node);
472    }).catch((error: Error) => {
473      console.error('Scene load failed:', error);
474      reject(error);
475    });
476  });
477}
478```
479
480### createMaterial
481createMaterial(params: SceneResourceParameters, materialType: MaterialType): Promise\<Material>
482
483根据场景资源参数和材质类型创建材质,使用Promise异步回调。
484
485**系统能力:** SystemCapability.ArkUi.Graphics3D
486
487**参数:**
488| 参数名 | 类型 | 必填 | 说明 |
489| ---- | ---- | ---- | ---- |
490| params | [SceneResourceParameters](#sceneresourceparameters) | 是 | 场景资源参数。 |
491| materialType | [MaterialType](js-apis-inner-scene-resources.md#materialtype) | 是 | 材质类型。 |
492
493**返回值:**
494| 类型 | 说明 |
495| ---- | ---- |
496| Promise\<[Material](js-apis-inner-scene-resources.md#material)> | Promise对象,返回材质对象。|
497
498**示例:**
499```ts
500import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
501  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
502
503function createMaterialPromise() : Promise<Material> {
504  return new Promise((resolve, reject) => {
505    // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
506    let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
507    scene.then(async (result: Scene) => {
508      let sceneFactory: SceneResourceFactory = result.getResourceFactory();
509      let sceneMaterialParameter: SceneResourceParameters = { name: "material" };
510      // 创建材质
511      let material: Material = await sceneFactory.createMaterial(sceneMaterialParameter, MaterialType.SHADER);
512      resolve(material);
513    }).catch((error: Error) => {
514      console.error('Scene load failed:', error);
515      reject(error);
516    });
517  });
518}
519```
520
521### createEnvironment
522createEnvironment(params: SceneResourceParameters): Promise\<Environment>
523
524根据场景资源参数创建环境,使用Promise异步回调。
525
526**系统能力:** SystemCapability.ArkUi.Graphics3D
527
528**参数:**
529| 参数名 | 类型 | 必填 | 说明 |
530| ---- | ---- | ---- | ---- |
531| params | [SceneResourceParameters](#sceneresourceparameters) | 是 | 场景资源参数。 |
532
533**返回值:**
534| 类型 | 说明 |
535| ---- | ---- |
536| Promise\<[Environment](js-apis-inner-scene-resources.md#environment)> | Promise对象,返回环境对象。 |
537
538**示例:**
539```ts
540import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
541  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
542
543function createEnvironmentPromise(): Promise<Environment> {
544  return new Promise((resolve, reject) => {
545    // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
546    let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
547    scene.then(async (result: Scene) => {
548      let sceneFactory: SceneResourceFactory = result.getResourceFactory();
549      // 加载环境贴图资源,路径和文件名可根据项目实际资源自定义
550      let sceneEnvironmentParameter: SceneResourceParameters = { name: "env", uri: $rawfile("KTX/quarry_02_2k_radiance.ktx") };
551      // 创建Environment
552      let env: Environment = await sceneFactory.createEnvironment(sceneEnvironmentParameter);
553      resolve(env);
554    }).catch((error: Error) => {
555      console.error('Scene load failed:', error);
556      reject(error);
557    });
558  });
559}
560```
561
562### createGeometry<sup>18+</sup>
563createGeometry(params: SceneNodeParameters, mesh:MeshResource): Promise\<Geometry>
564
565根据场景结点参数和网格数据创建几何对象,使用Promise异步回调。
566
567**系统能力:** SystemCapability.ArkUi.Graphics3D
568
569**参数:**
570| 参数名 | 类型 | 必填 | 说明 |
571| ---- | ---- | ---- | ---- |
572| params | [SceneNodeParameters](#scenenodeparameters) | 是 | 场景结点参数。 |
573| mesh | [MeshResource](js-apis-inner-scene-resources.md#meshresource18) | 是 | 网格数据参数。 |
574
575**返回值:**
576| 类型 | 说明 |
577| ---- | ---- |
578| Promise\<[Geometry](js-apis-inner-scene-nodes.md#geometry)> | Promise对象,返回几何对象。 |
579
580**示例:**
581```ts
582import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
583  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, Geometry,
584  MeshResource} from '@kit.ArkGraphics3D';
585import { CubeGeometry } from '@ohos.graphics.scene';
586
587function createGeometryPromise() : Promise<Geometry> {
588  return new Promise((resolve, reject) => {
589    let scene: Promise<Scene> = Scene.load();
590    scene.then(async (result: Scene | undefined) => {
591      if (!result) {
592        return;
593      }
594      let sceneFactory: SceneResourceFactory = result.getResourceFactory();
595      let cubeGeom = new CubeGeometry();
596      cubeGeom.size = { x: 1, y: 1, z: 1 };
597      let meshRes = await sceneFactory.createMesh({ name: "MeshName" }, cubeGeom);
598      console.info("TEST createGeometryPromise");
599      let geometry: Geometry = await sceneFactory.createGeometry({ name: "GeometryName" }, meshRes);
600      resolve(geometry);
601    }).catch((error: Error) => {
602      console.error('Scene load failed:', error);
603      reject(error);
604    });
605  });
606}
607```
608
609## SceneComponent<sup>20+</sup>
610表示基础场景组件,用于描述场景节点的组件信息,包括组件名称及其对应的属性集合。
611
612### 属性
613
614**系统能力:** SystemCapability.ArkUi.Graphics3D
615
616| 名称 | 类型 | 只读 | 可选 | 说明 |
617| ---- | ---- | ---- | ---- | ---- |
618| name | string | 否 | 否 | 要创建场景组件的名称,可由开发者自定填写,用于标识场景组件。|
619| property | Record<string, string \| number \| [Vec2](js-apis-inner-scene-types.md#vec2) \| [Vec3](js-apis-inner-scene-types.md#vec3) \| [Vec4](js-apis-inner-scene-types.md#vec4) \| [SceneResource](js-apis-inner-scene-resources.md#sceneresource-1) \| boolean \| number[] \| string[] \| [SceneResource](js-apis-inner-scene-resources.md#sceneresource-1)[] \| [Vec2](js-apis-inner-scene-types.md#vec2)[] \| [Vec3](js-apis-inner-scene-types.md#vec3)[] \| [Vec4](js-apis-inner-scene-types.md#vec4)[] \| null \| undefined> | 是 | 否 | 组件的属性集合,以键值对形式存储。支持多种基础类型和复杂类型,用于描述场景组件的各种属性。|
620
621## RenderContext<sup>20+</sup>
622定义了所有渲染资源的上下文。在同一渲染上下文中创建的多个场景之间,可以共享渲染资源。
623
624### getRenderResourceFactory<sup>20+</sup>
625getRenderResourceFactory() : RenderResourceFactory
626
627获取渲染资源工厂,提供创建不同渲染资源的功能。
628
629**系统能力:** SystemCapability.ArkUi.Graphics3D
630
631**返回值:**
632| 类型 | 说明 |
633| ---- | ---- |
634| [RenderResourceFactory](#renderresourcefactory20) | 返回一个RenderResourceFactory实例,用于创建渲染资源。 |
635
636**示例:**
637```ts
638import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
639  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, RenderContext,
640  RenderResourceFactory } from '@kit.ArkGraphics3D';
641
642function getRenderResourceFactory(): void {
643  const renderContext: RenderContext | null = Scene.getDefaultRenderContext();
644  if (!renderContext) {
645    console.error("RenderContext is null");
646    return;
647  }
648  const renderResourceFactory: RenderResourceFactory = renderContext.getRenderResourceFactory();
649  console.info("TEST getRenderResourceFactory");
650}
651```
652
653### loadPlugin<sup>20+</sup>
654loadPlugin(name: string): Promise\<boolean>
655
656用于加载指定名称的插件,通过插件名称查找并加载对应的插件资源,使用Promise异步回调。
657
658**系统能力:** SystemCapability.ArkUi.Graphics3D
659
660**参数:**
661| 参数名 | 类型 | 必填 | 说明 |
662| ---- | ---- | ---- | ---- |
663| name | string | 是 | 要加载的插件名称,必须是系统预定义或已注册且可用的插件名称,且符合命名规范。|
664
665**返回值:**
666| 类型 | 说明 |
667| ---- | ---- |
668| Promise\<boolean> | 返回一个Promise对象,解析结果为boolean类型,表示插件加载是否成功。true表示加载成功,false表示加载失败。 |
669
670**示例:**
671```ts
672import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
673  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, RenderContext,
674  RenderResourceFactory } from '@kit.ArkGraphics3D';
675
676function loadPlugin(): Promise<boolean> {
677  const renderContext: RenderContext | null = Scene.getDefaultRenderContext();
678  if (!renderContext) {
679    console.error("RenderContext is null");
680    return Promise.reject(new Error("RenderContext is null"));
681  }
682  return renderContext.loadPlugin("pluginName");
683}
684```
685
686### registerResourcePath<sup>20+</sup>
687registerResourcePath(protocol: string, uri: string): boolean
688
689注册shader等资产文件所在的路径目录及其检索名,通过检索名查找并替换shader内部关联文件的路径描述,找到对应的资产路径目录,实现资产及其关联文件的正确加载。
690
691**系统能力:** SystemCapability.ArkUi.Graphics3D
692
693**参数:**
694| 参数名 | 类型 | 必填 | 说明 |
695| ---- | ---- | ---- | ---- |
696| protocol | string | 是 | 要注册的路径检索名,必须是系统未预定义或未注册且非空的检索名称。|
697| uri | string | 是 | 要注册的资产路径目录,与检索名对应,必须是资产文件所在文件夹路径。|
698
699**返回值:**
700| 类型 | 说明 |
701| ---- | ---- |
702| boolean | 返回资产文件路径是否注册成功。true表示注册成功;false表示注册失败,可能原因为检索名已被注册或输入参数不可用。 |
703
704**示例:**
705```ts
706import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
707  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, RenderContext,
708  RenderResourceFactory } from '@kit.ArkGraphics3D';
709
710function registerResourcePath(): void {
711  // 创建shader资源,路径和文件名可根据项目实际资源自定义
712  Scene.load($rawfile("shaders/custom_shader/custom_material_sample.shader"))
713    .then(scene => {
714      const renderContext: RenderContext | null = Scene.getDefaultRenderContext();
715      if (!renderContext) {
716        console.error("RenderContext is null");
717        return false;
718      }
719      return renderContext.registerResourcePath("protocol", "OhosRawFile://uri");
720    })
721    .then(result => {
722      if (result) {
723        console.info("resource path registration success");
724      } else {
725        console.error("resource path registration failed");
726      }
727    });
728}
729```
730
731## RenderParameters<sup>15+</sup>
732渲染参数接口。
733
734**系统能力:** SystemCapability.ArkUi.Graphics3D
735| 名称 | 类型 | 只读 | 可选 | 说明 |
736| ---- | ---- | ---- | ---- | ---- |
737| alwaysRender<sup>15+</sup> | boolean | 否 | 是 | 表示是否每一帧都渲染。true表示每一帧都渲染,false表示按需渲染。默认值为true。 |
738
739
740## Scene
741用于设置场景。
742
743### 属性
744
745**系统能力:** SystemCapability.ArkUi.Graphics3D
746
747| 名称 | 类型 | 只读 | 可选 | 说明 |
748| ---- | ---- | ---- | ---- | ---- |
749| environment | [Environment](js-apis-inner-scene-resources.md#environment) | 否 | 否 | 环境对象。 |
750| animations | [Animation](js-apis-inner-scene-resources.md#animation)[] | 是 | 否 | 动画数组,用于保存3D场景中的动画对象。|
751| root | [Node](js-apis-inner-scene-nodes.md#node) \| null | 是 | 否 | 3D场景树根结点。 |
752
753### load
754static load(uri?: ResourceStr): Promise\<Scene>
755
756通过传入的资源路径加载资源,使用Promise异步回调。
757
758**系统能力:** SystemCapability.ArkUi.Graphics3D
759
760**参数:**
761| 参数名 | 类型 | 必填 | 说明 |
762| ---- | ---- | ---- | ---- |
763| uri | [ResourceStr](../apis-arkui/arkui-ts/ts-types.md#resourcestr) | 否 | 待加载的模型文件资源路径,默认值为undefined。|
764
765**返回值:**
766| 类型 | 说明 |
767| ---- | ---- |
768| Promise\<[Scene](#scene-1)> | Promise对象,返回场景对象。|
769
770**示例:**
771```ts
772import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
773  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
774
775function loadModel(): void {
776  // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
777  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
778  scene.then(async (result: Scene) => {});
779}
780```
781
782### getNodeByPath
783getNodeByPath(path: string, type?: NodeType): Node | null
784
785通过路径获取结点。
786
787**系统能力:** SystemCapability.ArkUi.Graphics3D
788
789**参数:**
790| 参数名 | 类型 | 必填 | 说明 |
791| ---- | ---- | ---- | ---- |
792| path | string | 是 | 场景结点层次中的路径。每层之间使用'/'符号进行分割。|
793| type | [NodeType](js-apis-inner-scene-nodes.md#nodetype) | 否 | 预期返回的结点类型。默认值为空。|
794
795**返回值:**
796| 类型 | 说明 |
797| ---- | ---- |
798| [Node](js-apis-inner-scene-nodes.md#node) \| null | 返回请求结点的实例,如果没有找到或者找到的节点类型与传入的参数不相符则返回空。 |
799
800**示例:**
801```ts
802import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
803  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
804
805function getNode(): void {
806  // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
807  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
808  scene.then(async (result: Scene) => {
809    if (result) {
810         // 寻找指定路径的节点
811        let node : Node | null = result.getNodeByPath("rootNode_");
812    }
813  });
814}
815```
816
817### getResourceFactory
818getResourceFactory(): SceneResourceFactory
819
820获取场景资源工厂对象。
821
822**系统能力:** SystemCapability.ArkUi.Graphics3D
823
824**返回值:**
825| 类型 | 说明 |
826| ---- | ---- |
827| [SceneResourceFactory](js-apis-inner-scene.md#sceneresourcefactory)| 返回场景资源工厂对象。 |
828
829**示例:**
830```ts
831import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
832  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
833
834function getFactory(): void {
835  // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
836  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
837  scene.then(async (result: Scene) => {
838    if (result) {
839         // 获得SceneResourceFactory对象
840        let sceneFactory: SceneResourceFactory = result.getResourceFactory();
841    }
842  });
843}
844```
845
846### destroy
847destroy(): void
848
849销毁场景,释放所有的场景资源。
850
851**系统能力:** SystemCapability.ArkUi.Graphics3D
852
853**示例:**
854```ts
855import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
856  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
857
858function destroy(): void {
859  // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
860  let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb"));
861  scene.then(async (result: Scene) => {
862    if (result) {
863         // 销毁scene
864        result.destroy();
865    }
866  });
867}
868```
869
870### importNode<sup>18+</sup>
871importNode(name: string, node: Node, parent: Node | null): Node
872
873一般用于从其他场景导入结点。
874
875**系统能力:** SystemCapability.ArkUi.Graphics3D
876
877**参数:**
878| 参数名 | 类型 | 必填 | 说明 |
879| ---- | ---- | ---- | ---- |
880| name | string | 是 | 导入结点后的名称,由开发者自定义,无特殊要求。|
881| node | [Node](js-apis-inner-scene-nodes.md#node) | 是 | 被导入的结点。|
882| parent | [Node](js-apis-inner-scene-nodes.md#node) \| null | 是 | 被导入结点在新场景中的父结点。|
883
884**返回值:**
885| 类型 | 说明 |
886| ---- | ---- |
887| [Node](js-apis-inner-scene-nodes.md#node) | 被导入的结点。|
888
889**示例:**
890```ts
891import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
892  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, Geometry, CubeGeometry, MeshResource} from '@kit.ArkGraphics3D';
893
894function ImportNodeTest() {
895  Scene.load().then(async (result: Scene | undefined) => {
896    if (!result) {
897      return;
898    }
899    // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
900    Scene.load($rawfile("gltf/AnimatedCube/glTF/AnimatedCube.glb"))
901      .then(async (extScene: Scene) => {
902        let extNode = extScene.getNodeByPath("rootNode_/Unnamed Node 1/AnimatedCube");
903        console.info("TEST ImportNodeTest");
904        let node = result.importNode("scene", extNode, result.root);
905        if (node) {
906          node.position.x = 5;
907        }
908      });
909  });
910}
911```
912
913### importScene<sup>18+</sup>
914importScene(name: string, scene: Scene, parent: Node | null): Node
915
916在当前场景中导入其他场景。
917
918**系统能力:** SystemCapability.ArkUi.Graphics3D
919
920**参数:**
921| 参数名 | 类型 | 必填 | 说明 |
922| ---- | ---- | ---- | ---- |
923| name | string | 是 | 导入场景的根结点名称,由开发者自定义,无特殊要求。|
924| scene | [Scene](#scene-1) | 是 | 被导入的场景。|
925| parent | [Node](js-apis-inner-scene-nodes.md#node) \| null | 是 | 被导入场景在新场景中的父结点。|
926
927**返回值:**
928| 类型 | 说明 |
929| ---- | ---- |
930| [Node](js-apis-inner-scene-nodes.md#node) | 被导入场景的根结点。|
931
932**示例:**
933```ts
934import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
935  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, Geometry, CubeGeometry, MeshResource} from '@kit.ArkGraphics3D';
936
937function ImportSceneTest() {
938  Scene.load().then(async (result: Scene | undefined) => {
939    if (!result) {
940      return;
941    }
942    // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
943    let content = await result.getResourceFactory().createScene($rawfile("gltf/DamagedHelmet/glTF/DamagedHelmet.glb"))
944    console.info("TEST ImportSceneTest");
945    result.importScene("helmet", content, null);
946  });
947}
948```
949
950### renderFrame<sup>15+</sup>
951renderFrame(params?: RenderParameters): boolean
952
953通过该接口可以实现按需渲染,例如控制渲染帧率。
954
955**系统能力:** SystemCapability.ArkUi.Graphics3D
956
957**参数:**
958| 参数名 | 类型 | 必填 | 说明 |
959| ---- | ---- | ---- | ---- |
960| params | [RenderParameters](#renderparameters15) | 否 | 渲染参数,默认值为undefined。|
961
962**返回值:**
963| 类型 | 说明 |
964| ---- | ---- |
965| boolean | 渲染被成功调度返回true,否则返回false。|
966
967**示例:**
968```ts
969import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
970  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, Geometry, CubeGeometry, MeshResource} from '@kit.ArkGraphics3D';
971
972function RenderFrameTest() {
973  // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
974  Scene.load($rawfile("gltf/DamagedHelmet/glTF/DamagedHelmet.glb"))
975    .then(async (result: Scene | undefined) => {
976      if (!result) {
977        return;
978      }
979      console.info("TEST RenderFrameTest");
980      result.renderFrame({ alwaysRender: true });
981  });
982}
983```
984
985### createComponent<sup>20+</sup>
986createComponent(node: Node, name: string): Promise\<SceneComponent>
987
988在指定节点上创建新的组件,根据组件名称异步创建并附加到节点上,使用Promise异步回调。
989
990**系统能力:** SystemCapability.ArkUi.Graphics3D
991
992**参数:**
993| 参数名 | 类型 | 必填 | 说明 |
994| ---- | ---- | ---- | ---- |
995| node | [Node](js-apis-inner-scene-nodes.md#node) | 是 | 组件需要附加到的节点。|
996| name | string | 是 | 要创建的组件名称,由各插件定义有效名称。|
997
998**返回值:**
999| 类型 | 说明 |
1000| ---- | ---- |
1001| Promise\<[SceneComponent](#scenecomponent20)> | Promise对象,返回新创建的场景组件。|
1002
1003**示例:**
1004```ts
1005import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
1006  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node } from '@kit.ArkGraphics3D';
1007import { SceneComponent } from '@ohos.graphics.scene';
1008
1009
1010function createComponentTest(): Promise<SceneComponent> {
1011  // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
1012  return Scene.load($rawfile("gltf/DamagedHelmet/glTF/DamagedHelmet.glb"))
1013    .then(scene => {
1014      if (!scene) {
1015        return Promise.reject(new Error("Scene load failed"));
1016      }
1017      // RenderConfigurationComponent为引擎内置组件,创建时无需依赖插件
1018      return scene.createComponent(scene.root, "RenderConfigurationComponent");
1019    })
1020    .then(component => {
1021      if (!component) {
1022        return Promise.reject(new Error("createComponent failed"));
1023      }
1024      return component;
1025    });
1026}
1027```
1028
1029### getComponent<sup>20+</sup>
1030getComponent(node: Node, name: string): SceneComponent | null
1031
1032根据指定的组件名称,从给定节点上获取对应的组件实例。
1033
1034**系统能力:** SystemCapability.ArkUi.Graphics3D
1035
1036**参数:**
1037| 参数名 | 类型 | 必填 | 说明 |
1038| ---- | ---- | ---- | ---- |
1039| node | [Node](js-apis-inner-scene-nodes.md#node) | 是 | 组件附加的节点。|
1040| name | string | 是 | 需要获取的组件名称,必须为系统预定义或已注册的自定义组件名称,且需符合命名规范。|
1041
1042**返回值:**
1043| 类型 | 说明 |
1044| ---- | ---- |
1045| [SceneComponent](#scenecomponent20) \| null | 返回对应名称的组件对象,若未找到则返回null。|
1046
1047**示例:**
1048```ts
1049import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
1050  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, Geometry, CubeGeometry, MeshResource, SceneComponent } from '@kit.ArkGraphics3D';
1051
1052function getComponentTest() {
1053  // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义
1054  Scene.load($rawfile("gltf/DamagedHelmet/glTF/DamagedHelmet.glb"))
1055    .then(async (result: Scene | undefined) => {
1056      if (!result) {
1057        console.error("Scene load failed");
1058        return;
1059      }
1060      console.info("TEST getComponentTest");
1061      let component = result.getComponent(result.root, "myComponent");
1062      if (component) {
1063        console.info("getComponent success");
1064      } else {
1065        console.warn("Component not found");
1066      }
1067    });
1068}
1069```
1070
1071### getDefaultRenderContext<sup>20+</sup>
1072static getDefaultRenderContext(): RenderContext | null
1073
1074获取当前图形对象所关联的渲染环境信息。
1075
1076**系统能力:** SystemCapability.ArkUi.Graphics3D
1077
1078**返回值:**
1079| 类型 | 说明 |
1080| ---- | ---- |
1081| [RenderContext](#rendercontext20) \| null | 返回当前对象关联的渲染上下文,若对象尚未关联任何渲染上下文,则返回null。|
1082
1083**示例:**
1084```ts
1085import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters,
1086  LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, Geometry, CubeGeometry, MeshResource, SceneComponent, RenderContext } from '@kit.ArkGraphics3D';
1087
1088function getDefaultRenderContextTest() {
1089  console.info("TEST getDefaultRenderContextTest");
1090  const renderContext: RenderContext | null = Scene.getDefaultRenderContext();
1091  if (renderContext) {
1092    console.info("getDefaultRenderContext success");
1093  } else {
1094    console.error("RenderContext is null");
1095  }
1096}
1097```
1098