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