1e41f4b71Sopenharmony_ci# Component3D
2e41f4b71Sopenharmony_ci3D渲染组件,可以加载3D模型资源并做自定义渲染,通常用于3D动效场景。
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ci>  **说明:**
5e41f4b71Sopenharmony_ci>
6e41f4b71Sopenharmony_ci>  该组件从API Version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
7e41f4b71Sopenharmony_ci
8e41f4b71Sopenharmony_ci## 子组件
9e41f4b71Sopenharmony_ci
10e41f4b71Sopenharmony_ci11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci## 接口 
14e41f4b71Sopenharmony_ci
15e41f4b71Sopenharmony_ciComponent3D((sceneOptions?: SceneOptions))
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ci**参数:**
20e41f4b71Sopenharmony_ci
21e41f4b71Sopenharmony_ci| 参数名          | 参数类型                              | 必填   | 参数描述                                     |
22e41f4b71Sopenharmony_ci| ------------ | --------------------------------- | ---- | ---------------------------------------- |
23e41f4b71Sopenharmony_ci| sceneOptions | [SceneOptions](#sceneoptions对象说明) | 否    | 3D场景配置选项。<br/>**说明:** <br/> 3D场景配置选项在控件创建后不支持动态修改。 |
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ci
26e41f4b71Sopenharmony_ci## SceneOptions对象说明
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ciComponent3D组件配置选项。
29e41f4b71Sopenharmony_ci
30e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
31e41f4b71Sopenharmony_ci
32e41f4b71Sopenharmony_ci| 名称        | 类型                               | 必填   | 说明                                       |
33e41f4b71Sopenharmony_ci| --------- | -------------------------------- | ---- | ---------------------------------------- |
34e41f4b71Sopenharmony_ci| scene     | [Resource](ts-types.md#resource)\|[Scene](../../apis-arkgraphics3d/js-apis-inner-scene.md#scene-1)<sup>12+</sup> | 否    | 3D模型资源文件或场景对象,默认值为undefined。<br/>**说明:** <br/>目前仅支持GLTF格式资源。 |
35e41f4b71Sopenharmony_ci| modelType | [ModelType](#modeltype枚举说明) | 否    | 3D场景显示合成方式。<br/>默认值:ModelType.SURFACE<br/>**说明:** <br/>设置为ModelType.TEXTURE时通过GPU合成显示。<br/>设置为ModelType.SURFACE时通过专有硬件合成显示。<br/>一般开发者可以使用默认值而无需关心此项设置。 |
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ci## ModelType枚举说明
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_ci| 名称      | 描述             |
42e41f4b71Sopenharmony_ci| ------- | -------------- |
43e41f4b71Sopenharmony_ci| TEXTURE | 使用GPU合成显示3D场景。 |
44e41f4b71Sopenharmony_ci| SURFACE | 使用专有硬件显示3D场景。  |
45e41f4b71Sopenharmony_ci
46e41f4b71Sopenharmony_ci
47e41f4b71Sopenharmony_ci## 属性
48e41f4b71Sopenharmony_ci
49e41f4b71Sopenharmony_ci除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性:
50e41f4b71Sopenharmony_ci
51e41f4b71Sopenharmony_ci### environment
52e41f4b71Sopenharmony_ci
53e41f4b71Sopenharmony_cienvironment(uri: Resource)
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ci设置3D环境资源。目前仅支持GLTF格式资源,模型资源在控件创建后不支持动态修改。
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
58e41f4b71Sopenharmony_ci
59e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D
60e41f4b71Sopenharmony_ci
61e41f4b71Sopenharmony_ci**参数:** 
62e41f4b71Sopenharmony_ci
63e41f4b71Sopenharmony_ci| 参数名 | 类型                             | 必填 | 说明         |
64e41f4b71Sopenharmony_ci| ------ | -------------------------------- | ---- | ------------ |
65e41f4b71Sopenharmony_ci| uri    | [Resource](ts-types.md#resource) | 是   | 3D环境资源。 |
66e41f4b71Sopenharmony_ci
67e41f4b71Sopenharmony_ci### customRender
68e41f4b71Sopenharmony_ci
69e41f4b71Sopenharmony_cicustomRender(uri: Resource, selfRenderUpdate: boolean)
70e41f4b71Sopenharmony_ci
71e41f4b71Sopenharmony_ci设置三维场景渲染的渲染管道。管线配置及自渲染属性在控件创建后不支持动态修改。
72e41f4b71Sopenharmony_ci
73e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
74e41f4b71Sopenharmony_ci
75e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ci**参数:** 
78e41f4b71Sopenharmony_ci
79e41f4b71Sopenharmony_ci| 参数名           | 类型                             | 必填 | 说明                                                         |
80e41f4b71Sopenharmony_ci| ---------------- | -------------------------------- | ---- | ------------------------------------------------------------ |
81e41f4b71Sopenharmony_ci| uri              | [Resource](ts-types.md#resource) | 是   | 自定义渲染管线的配置文件。                                   |
82e41f4b71Sopenharmony_ci| selfRenderUpdate | boolean                          | 是   | 当设置为true时外部UI没有更新时也能触发动效渲染。<br/>当设置为false时只有外部UI更新才能触发渲染。 |
83e41f4b71Sopenharmony_ci
84e41f4b71Sopenharmony_ci### shader
85e41f4b71Sopenharmony_ci
86e41f4b71Sopenharmony_cishader(uri: Resource)
87e41f4b71Sopenharmony_ci
88e41f4b71Sopenharmony_ci设置自定义渲染的shader文件资源。自定义渲染的shader文件资源在控件创建后不支持动态修改。
89e41f4b71Sopenharmony_ci
90e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
91e41f4b71Sopenharmony_ci
92e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D
93e41f4b71Sopenharmony_ci
94e41f4b71Sopenharmony_ci**参数:** 
95e41f4b71Sopenharmony_ci
96e41f4b71Sopenharmony_ci| 参数名 | 类型                             | 必填 | 说明                         |
97e41f4b71Sopenharmony_ci| ------ | -------------------------------- | ---- | ---------------------------- |
98e41f4b71Sopenharmony_ci| uri    | [Resource](ts-types.md#resource) | 是   | 自定义渲染的shader文件资源。 |
99e41f4b71Sopenharmony_ci
100e41f4b71Sopenharmony_ci### shaderImageTexture
101e41f4b71Sopenharmony_ci
102e41f4b71Sopenharmony_cishaderImageTexture(uri: Resource)
103e41f4b71Sopenharmony_ci
104e41f4b71Sopenharmony_ci设置自定义渲染用到的纹理资源。若自定义渲染用到多个纹理资源则调用多次,绑定点与调用顺序一致,不支持纹理更换。纹理资源在控件创建后不支持动态修改。
105e41f4b71Sopenharmony_ci
106e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
107e41f4b71Sopenharmony_ci
108e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D
109e41f4b71Sopenharmony_ci
110e41f4b71Sopenharmony_ci**参数:** 
111e41f4b71Sopenharmony_ci
112e41f4b71Sopenharmony_ci| 参数名 | 类型                             | 必填 | 说明                       |
113e41f4b71Sopenharmony_ci| ------ | -------------------------------- | ---- | -------------------------- |
114e41f4b71Sopenharmony_ci| uri    | [Resource](ts-types.md#resource) | 是   | 自定义渲染用到的纹理资源。 |
115e41f4b71Sopenharmony_ci
116e41f4b71Sopenharmony_ci### shaderInputBuffer
117e41f4b71Sopenharmony_ci
118e41f4b71Sopenharmony_cishaderInputBuffer(buffer: Array&lt;number&gt;)
119e41f4b71Sopenharmony_ci
120e41f4b71Sopenharmony_ci设置自定义渲染用到的动效参数。
121e41f4b71Sopenharmony_ci
122e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
123e41f4b71Sopenharmony_ci
124e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D
125e41f4b71Sopenharmony_ci
126e41f4b71Sopenharmony_ci**参数:** 
127e41f4b71Sopenharmony_ci
128e41f4b71Sopenharmony_ci| 参数名 | 类型           | 必填 | 说明                       |
129e41f4b71Sopenharmony_ci| ------ | -------------- | ---- | -------------------------- |
130e41f4b71Sopenharmony_ci| buffer | Array<number\> | 是   | 自定义渲染用到的动效参数。 |
131e41f4b71Sopenharmony_ci
132e41f4b71Sopenharmony_ci### renderWidth
133e41f4b71Sopenharmony_ci
134e41f4b71Sopenharmony_cirenderWidth(value: Dimension)
135e41f4b71Sopenharmony_ci
136e41f4b71Sopenharmony_ci设置3D渲染分辨率的宽度。渲染分辨率的长宽可以不同于控件的长宽,若渲染分辨率与控件分辨率长宽不一致时会上采样或下采样到控件长宽。
137e41f4b71Sopenharmony_ci
138e41f4b71Sopenharmony_ci不调用此属性时默认渲染分辨率。
139e41f4b71Sopenharmony_ci
140e41f4b71Sopenharmony_ci渲染分辨率在控件创建后不支持动态修改。
141e41f4b71Sopenharmony_ci
142e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
143e41f4b71Sopenharmony_ci
144e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D
145e41f4b71Sopenharmony_ci
146e41f4b71Sopenharmony_ci**参数:** 
147e41f4b71Sopenharmony_ci
148e41f4b71Sopenharmony_ci| 参数名 | 类型                                 | 必填 | 说明                 |
149e41f4b71Sopenharmony_ci| ------ | ------------------------------------ | ---- | -------------------- |
150e41f4b71Sopenharmony_ci| value  | [Dimension](ts-types.md#dimension10) | 是   | 3D渲染分辨率的宽度。 |
151e41f4b71Sopenharmony_ci
152e41f4b71Sopenharmony_ci### renderHeight
153e41f4b71Sopenharmony_ci
154e41f4b71Sopenharmony_cirenderHeight(value: Dimension)
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ci设置3D渲染分辨率的长度。渲染分辨率的长宽可以不同于控件的长宽,若渲染分辨率与控件分辨率长宽不一致时会上采样或下采样到控件长宽。
157e41f4b71Sopenharmony_ci
158e41f4b71Sopenharmony_ci不调用此属性时默认渲染分辨率。
159e41f4b71Sopenharmony_ci
160e41f4b71Sopenharmony_ci渲染分辨率在控件创建后不支持动态修改。
161e41f4b71Sopenharmony_ci
162e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
163e41f4b71Sopenharmony_ci
164e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUi.Graphics3D
165e41f4b71Sopenharmony_ci
166e41f4b71Sopenharmony_ci**参数:** 
167e41f4b71Sopenharmony_ci
168e41f4b71Sopenharmony_ci| 参数名 | 类型                                 | 必填 | 说明                 |
169e41f4b71Sopenharmony_ci| ------ | ------------------------------------ | ---- | -------------------- |
170e41f4b71Sopenharmony_ci| value  | [Dimension](ts-types.md#dimension10) | 是   | 3D渲染分辨率的长度。 |
171e41f4b71Sopenharmony_ci
172e41f4b71Sopenharmony_ci## 事件
173e41f4b71Sopenharmony_ci
174e41f4b71Sopenharmony_ci支持[通用事件](ts-universal-events-click.md)。
175e41f4b71Sopenharmony_ci
176e41f4b71Sopenharmony_ci## 示例
177e41f4b71Sopenharmony_ci示例效果请以真机运行为准,当前IDE预览器不支持。<br/>
178e41f4b71Sopenharmony_ciGLTF模型加载示例。 <br/>
179e41f4b71Sopenharmony_ci```ts
180e41f4b71Sopenharmony_ci// xxx.ets
181e41f4b71Sopenharmony_ci@Entry
182e41f4b71Sopenharmony_ci@Component
183e41f4b71Sopenharmony_cistruct Index {
184e41f4b71Sopenharmony_ci  scene: SceneOptions = { scene: $rawfile('gltf/DamageHemlt/glTF/DamagedHelmet.gltf'), modelType: ModelType.SURFACE};
185e41f4b71Sopenharmony_ci  build() {
186e41f4b71Sopenharmony_ci    Row() {
187e41f4b71Sopenharmony_ci      Column() {
188e41f4b71Sopenharmony_ci        Text('GLTF Example')
189e41f4b71Sopenharmony_ci        Component3D( this.scene )
190e41f4b71Sopenharmony_ci          .environment($rawfile('gltf/Environment/glTF/Environment.gltf'))
191e41f4b71Sopenharmony_ci          .renderWidth('90%').renderHeight('90%')
192e41f4b71Sopenharmony_ci      }.width('100%')
193e41f4b71Sopenharmony_ci    }
194e41f4b71Sopenharmony_ci    .height('100%')
195e41f4b71Sopenharmony_ci  }
196e41f4b71Sopenharmony_ci}
197e41f4b71Sopenharmony_ci```
198e41f4b71Sopenharmony_ci自定义渲染示例。 <br/>
199e41f4b71Sopenharmony_ci
200e41f4b71Sopenharmony_ci```ts
201e41f4b71Sopenharmony_ciimport { Animator as animator, AnimatorResult } from '@kit.ArkUI';
202e41f4b71Sopenharmony_ci
203e41f4b71Sopenharmony_ciclass EngineTime {
204e41f4b71Sopenharmony_ci  totalTimeUs = 0;
205e41f4b71Sopenharmony_ci  deltaTimeUs = 0;
206e41f4b71Sopenharmony_ci};
207e41f4b71Sopenharmony_ci
208e41f4b71Sopenharmony_cilet engineTime = new EngineTime();
209e41f4b71Sopenharmony_cilet frameCount: number = 0;
210e41f4b71Sopenharmony_ci
211e41f4b71Sopenharmony_cifunction TickFrame() {
212e41f4b71Sopenharmony_ci  if (frameCount == 10) {
213e41f4b71Sopenharmony_ci    engineTime.totalTimeUs += 1.0;
214e41f4b71Sopenharmony_ci    engineTime.deltaTimeUs += 1.0;
215e41f4b71Sopenharmony_ci    frameCount = 0;
216e41f4b71Sopenharmony_ci  } else {
217e41f4b71Sopenharmony_ci    frameCount++;
218e41f4b71Sopenharmony_ci  }
219e41f4b71Sopenharmony_ci}
220e41f4b71Sopenharmony_ci
221e41f4b71Sopenharmony_ci@Entry
222e41f4b71Sopenharmony_ci@Component
223e41f4b71Sopenharmony_cistruct Index {
224e41f4b71Sopenharmony_ci  scene: SceneOptions = { scene: $rawfile('gltf/DamageHemlt/glTF/DamagedHelmet.gltf'), modelType: ModelType.SURFACE};
225e41f4b71Sopenharmony_ci  backAnimator: AnimatorResult = animator.create({
226e41f4b71Sopenharmony_ci    duration: 2000,
227e41f4b71Sopenharmony_ci    easing: "ease",
228e41f4b71Sopenharmony_ci    delay: 0,
229e41f4b71Sopenharmony_ci    fill: "none",
230e41f4b71Sopenharmony_ci    direction: "normal",
231e41f4b71Sopenharmony_ci    iterations: -1,
232e41f4b71Sopenharmony_ci    begin: 100,
233e41f4b71Sopenharmony_ci    end: 200,
234e41f4b71Sopenharmony_ci  });
235e41f4b71Sopenharmony_ci  @State timeDelta: number[] = [1.0, 2.0];
236e41f4b71Sopenharmony_ci  create() {
237e41f4b71Sopenharmony_ci    this.backAnimator.onfinish = () => {
238e41f4b71Sopenharmony_ci      console.log('backAnimator onfinish');
239e41f4b71Sopenharmony_ci    }
240e41f4b71Sopenharmony_ci    this.backAnimator.onframe = value => {
241e41f4b71Sopenharmony_ci      TickFrame();
242e41f4b71Sopenharmony_ci      this.timeDelta[0] = engineTime.deltaTimeUs;
243e41f4b71Sopenharmony_ci    }
244e41f4b71Sopenharmony_ci
245e41f4b71Sopenharmony_ci  }
246e41f4b71Sopenharmony_ci  build() {
247e41f4b71Sopenharmony_ci    Row() {
248e41f4b71Sopenharmony_ci      Column() {
249e41f4b71Sopenharmony_ci        Text('custom rendering')
250e41f4b71Sopenharmony_ci        Component3D()
251e41f4b71Sopenharmony_ci          .shader($rawfile('assets/app/shaders/shader/London.shader'))
252e41f4b71Sopenharmony_ci          .shaderImageTexture($rawfile('assets/London.jpg'))
253e41f4b71Sopenharmony_ci          .shaderInputBuffer(this.timeDelta)
254e41f4b71Sopenharmony_ci          .customRender($rawfile('assets/app/rendernodegraphs/London.rng'), true)
255e41f4b71Sopenharmony_ci          .renderWidth('90%').renderHeight('90%')
256e41f4b71Sopenharmony_ci          .onAppear(() => {
257e41f4b71Sopenharmony_ci            this.create();
258e41f4b71Sopenharmony_ci            this.backAnimator.play();
259e41f4b71Sopenharmony_ci          }).width('50%').height('50%')
260e41f4b71Sopenharmony_ci      }.width('100%')
261e41f4b71Sopenharmony_ci    }
262e41f4b71Sopenharmony_ci    .height('100%')
263e41f4b71Sopenharmony_ci  }
264e41f4b71Sopenharmony_ci}
265e41f4b71Sopenharmony_ci```