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