• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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-->