1# 创建并使用环境资源 2<!--Kit: ArkGraphics 3D--> 3<!--Subsystem: Graphics--> 4<!--Owner: @zzhao0--> 5<!--Designer: @zdustc--> 6<!--Tester: @zhangyue283--> 7<!--Adviser: @ge-yafang--> 8 9环境(Environment):环境是3D场景背景的一种描述,可以基于图片进行创建。通过将一张图片进行正方体或者球体的映射处理,将图片贴在正方体或者球体上,在3D场景中模拟真实的环境。 10 11ArkGraphics 3D支持用户创建环境资源,定义3D场景的背景。 12 13 14## 环境资源的创建及使用 15环境资源的创建需要指定名字以及图片或者glTF在文件沙箱中的路径,将环境资源设置到3D scene的environment属性,即可以将创建的环境资源设置为3D场景的背景环境。环境资源提供了diffuseFactor、specularFactor等的属性,支撑开发者对于环境资源属性进行控制。示例代码如下: 16```ts 17import { Image, Shader, MaterialType, Material, ShaderMaterial, Animation, Environment, Container, SceneNodeParameters, 18 LightType, Light, Camera, SceneResourceParameters, SceneResourceFactory, Scene, Node, EnvironmentBackgroundType } from '@kit.ArkGraphics3D'; 19 20function createEnvironmentPromise(): Promise<Environment> { 21 return new Promise((resolve, reject) => { 22 // 加载场景资源,支持.gltf和.glb格式,路径和文件名可根据项目实际资源自定义 23 let scene: Promise<Scene> = Scene.load($rawfile("gltf/CubeWithFloor/glTF/AnimatedCube.glb")); 24 scene.then(async (result: Scene) => { 25 let sceneFactory: SceneResourceFactory = result.getResourceFactory(); 26 // 加载图片资源,可用于环境贴图。路径uri可根据项目结构自由指定 27 let sceneImageParameter: SceneResourceParameters = { name: "image", uri: $rawfile("bricks.jpg") }; 28 let image: Promise<Image> = sceneFactory.createImage(sceneImageParameter); 29 image.then(async (imageEntity: Image) => { 30 // 创建Environment 31 let sceneEnvironmentParameter: SceneResourceParameters = { name: "env" }; 32 let env: Promise<Environment> = sceneFactory.createEnvironment(sceneEnvironmentParameter); 33 env.then(async (envEntity: Environment) => { 34 // 设置环境背景类型为等矩形贴图 35 envEntity.backgroundType = EnvironmentBackgroundType.BACKGROUND_EQUIRECTANGULAR; 36 // 绑定加载的图片作为环境贴图 37 envEntity.environmentImage = imageEntity; 38 // 设置环境相关属性 39 envEntity.indirectDiffuseFactor.x = 1; 40 envEntity.indirectDiffuseFactor.y = 1; 41 envEntity.indirectDiffuseFactor.z = 1; 42 envEntity.indirectDiffuseFactor.w = 1; 43 resolve(envEntity); 44 }); 45 }); 46 }); 47 }); 48} 49``` 50 51 52<!--RP1--> 53## 相关实例 54 55对于3D资源更加综合的使用可以参考以下实例: 56- [3D引擎接口示例(ArkTS)(API12)](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Graphics/Graphics3d) 57<!--RP1End-->