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_ci无 11e41f4b71Sopenharmony_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<number>) 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```