Name | Date | Size | ||
---|---|---|---|---|
.. | 25-Oct-2024 | 4 KiB | ||
.gitignore | H A D | 25-Oct-2024 | 119 | |
AppScope/ | H | 25-Oct-2024 | 4 KiB | |
build-profile.json5 | H A D | 25-Oct-2024 | 1.2 KiB | |
entry/ | H | 25-Oct-2024 | 4 KiB | |
hvigor/ | H | 25-Oct-2024 | 4 KiB | |
hvigorfile.ts | H A D | 25-Oct-2024 | 843 | |
hvigorw | H A D | 25-Oct-2024 | 1.4 KiB | |
hvigorw.bat | H A D | 25-Oct-2024 | 1.5 KiB | |
oh-package-lock.json5 | H A D | 25-Oct-2024 | 1 KiB | |
oh-package.json5 | H A D | 25-Oct-2024 | 844 | |
ohosTest.md | H A D | 25-Oct-2024 | 729 | |
README.md | H A D | 25-Oct-2024 | 4.4 KiB | |
screenshots/ | H | 25-Oct-2024 | 4 KiB |
README.md
1# XComponent3D 2 3#### 介绍 4基于XComponent组件调用Native API来创建EGL/GLES环境,从而使用标准OpenGL ES进行图形渲染。本项目实现了两个示例: 5 61. 使用OpenGL实现2D的图形绘制和动画; 7 82. 使用OpenGL实现了在主页面绘制两个立方体,光源可以在当前场景中移动,并实现了光照效果。 9 10> **说明** 11> 本示例XComponent接口使用方法已停止演进,推荐使用方法请参考[ArkTSXComponent示例](../ArkTSXComponent/README_zh.md)。 12#### 效果展示 13 14| 3D效果1 | 3D效果2 | 2D效果1 | 2D效果2 | 15|---------------------------------------------------------|---------------------------------------------------------|---------------------------------------------------------|---------------------------------------------------------| 16| <img src=".//screenshots/3D_1.jpg" style="zoom:25%;" /> | <img src=".//screenshots/3D_2.jpg" style="zoom:25%;" /> | <img src=".//screenshots/2D_1.jpg" style="zoom:25%;" /> | <img src=".//screenshots/2D_2.jpg" style="zoom:25%;" /> | 17 18 19#### 使用说明 20 21在主页面,默认展示的是3D图形绘制效果,通过点击tab可以切换到第二个2D绘制效果 22 23#### 工程目录 24``` 25entry/src/main/ets/ 26|---entryability 27| | |---EntryAbility.ts 28|---pages 29| |---Index.ets //首页 30entry/src/main/cpp/ 31|---algorithm 32 |---Algorithm.h // 实现了Perspective,LookAt。 33 |---Matrix4x4.h // 4*4的矩阵运算,支持旋转,位移,缩放,矩阵的乘法 34 |---Matrix4x4.cpp 35 |---Quaternion.h // 四元素,用于旋转 36 |---Quaternion.cpp 37 |---Vector3.h // 三维向量运算 38 |---Vector3.cpp 39|---include 40 |---util 41 |---log.h // 日志工具类 42 |---napi_manager.h // 负责管理注册进来的多个XComponent控件 43 |---napi_util.h // 工具类 44 |---native_common.h // napi函数注册入口 45 |---types.h // 常量类 46 |---app_napi.h // 实现XComponent的生命周期函数,注册napi绘制接口 47 |---camera.h // 相机类 48 |---opengl_draw.h // 3D类绘制类,用于绘制立方体或者长方体 49 |---shader.h // shader编译类 50|---shape 51 |---base_shape.h // 形状绘制基类 52 |---cube.cpp 53 |---cube.h // 立方体绘制类,继承base_shape 54 |---rectangle.cpp 55 |---rectangle.h // 长方体绘制类,继承base_shape 56|---types 57 |---libnativerender 58 |---nativerender.d.ts // 对外接口,用于界面进行调用 59|---app_napi.app 60|---module.cpp 61|---napi_manager.cpp 62|---napi_util.cpp 63|---opengl_draw.cpp 64``` 65 66#### 具体实现 67 68在主页面显示了一个XComponent控件,默认显示立方体。通过用户点击,触发ChangeShape事件,opengl_draw收到事件,完成绘制内容变更。首页启动时,会触发一个定时器,每40ms触发一次,当opengl_draw收到事件时,进行动画更新。 69 70在XComponent初始化完成时,OnSurfaceCreated回调里面,会自动开始图形绘制。源码参考[opengl_draw.cpp](.//entry/src/main/cpp/opengl_draw.cpp) 。在opengl_draw.cpp里面Init方法会创建EglWindow和EGLSurface,然后创建上下文EGLContext, 完成baseShape的初始化,默认使用Cube进行初始化。 71 72---绘制2D图形:rectangle.cpp的Init方法,完成Shader的初始化; Update方法主要是绘制两个图形,一个进行旋转,一个进行缩放 73---绘制3D物体:cube.cpp的Init方法,完成Shader的初始化,相机的初始化。 Update方法绘制了两个立方体,一个在屏幕中间,另一个会围绕中间的物体进行圆周运动。并且设置运动的物体为发光源,在中间物体展示不同角度的光照效果。 74 75 76#### 相关权限 77不涉及 78 79 80#### 依赖 81不涉及 82 83 84#### 约束与限制 85本示例仅支持标准系统上运行,支持设备:RK3568; 86 87本示例已适配API version 10版本SDK,版本号:4.0.10.13 88 89本示例需要使用Build Version: 4.0.0.600 (Build Version: 4.0.0.600, built on October 17, 2023)及以上版本才可编译运行; 90 91 92#### 下载 93 94如需单独下载本工程,执行如下命令: 95``` 96git init 97git config core.sparsecheckout true 98echo code/BasicFeature/Native/XComponent3D > .git/info/sparse-checkout 99git remote add origin https://gitee.com/openharmony/applications_app_samples.git 100git pull origin master 101``` 102