HarmonyOS实战开发-使用OpenGL实现2D图形绘制和动画。

介绍

基于XComponent组件调用Native API来创建EGL/GLES环境,从而使用标准OpenGL ES进行图形渲染。本项目实现了两个示例:

  1. 使用OpenGL实现2D的图形绘制和动画;
  2. 使用OpenGL实现了在主页面绘制两个立方体,光源可以在当前场景中移动,并实现了光照效果。

效果展示

在这里插入图片描述
使用说明

在主页面,默认展示的是3D图形绘制效果,通过点击tab可以切换到第二个2D绘制效果

工程目录

entry/src/main/ets/
|---entryability
|	|	|---EntryAbility.ts
|---pages
|	|---Index.ets				//首页
entry/src/main/cpp/
|---algorithm|---Algorithm.h 			// 实现了Perspective,LookAt。|---Matrix4x4.h 			// 4*4的矩阵运算,支持旋转,位移,缩放,矩阵的乘法|---Matrix4x4.cpp|---Quaternion.h 			// 四元素,用于旋转|---Quaternion.cpp|---Vector3.h 				// 三维向量运算|---Vector3.cpp
|---include|---util|---log.h 				// 日志工具类|---napi_manager.h		// 负责管理注册进来的多个XComponent控件|---napi_util.h			// 工具类|---native_common.h		// napi函数注册入口|---types.h				// 常量类|---app_napi.h				// 实现XComponent的生命周期函数,注册napi绘制接口|---camera.h				// 相机类|---opengl_draw.h			// 3D类绘制类,用于绘制立方体或者长方体|---shader.h				// shader编译类
|---shape|---base_shape.h			// 形状绘制基类|---cube.cpp|---cube.h					// 立方体绘制类,继承base_shape|---rectangle.cpp|---rectangle.h				// 长方体绘制类,继承base_shape
|---types|---libnativerender			|---nativerender.d.ts	// 对外接口,用于界面进行调用
|---app_napi.app				
|---module.cpp					
|---napi_manager.cpp			
|---napi_util.cpp				
|---opengl_draw.cpp	

具体实现

在主页面显示了一个XComponent控件,默认显示立方体。通过用户点击,触发ChangeShape事件,opengl_draw收到事件,完成绘制内容变更。首页启动时,会触发一个定时器,每40ms触发一次,当opengl_draw收到事件时,进行动画更新。

在XComponent初始化完成时,OnSurfaceCreated回调里面,会自动开始图形绘制。在opengl_draw.cpp里面Init方法会创建EglWindow和EGLSurface,然后创建上下文EGLContext, 完成baseShape的初始化,默认使用Cube进行初始化。

—绘制2D图形:rectangle.cpp的Init方法,完成Shader的初始化; Update方法主要是绘制两个图形,一个进行旋转,一个进行缩放 —绘制3D物体:cube.cpp的Init方法,完成Shader的初始化,相机的初始化。 Update方法绘制了两个立方体,一个在屏幕中间,另一个会围绕中间的物体进行圆周运动。并且设置运动的物体为发光源,在中间物体展示不同角度的光照效果。

相关权限

不涉及

依赖

不涉及

约束与限制

本示例仅支持标准系统上运行,支持设备:RK3568;

本示例已适配API version 10版本SDK,版本号:4.0.10.13

本示例需要使用Build Version: 4.0.0.600 (Build Version: 4.0.0.600, built on October 17, 2023)及以上版本才可编译运行;

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo code/BasicFeature/Native/XComponent3D > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→HarmonyOS教学视频:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等…视频教程

在这里插入图片描述
在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF: 获取完整版白皮书方式请点击→https://docs.qq.com/doc/DZVVkRGRUd3pHSnFG?u=a42c4946d1514235863bb82a7b2ac128

在这里插入图片描述

鸿蒙 (Harmony OS)开发学习手册→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

一、入门必看

1.应用开发导读(ArkTS)
2………
在这里插入图片描述

二、HarmonyOS 概念→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.系统定义
2.技术架构
3.技术特性
4.系统安全
5…

在这里插入图片描述

三、如何快速入门?→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念
2.构建第一个ArkTS应用
3…

在这里插入图片描述

四、开发基础知识→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
在这里插入图片描述

五、基于ArkTS 开发→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
在这里插入图片描述

更多了解更多鸿蒙开发的相关知识可以参考:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2009.使数组连续的最少操作数:去重排序 + 滑动窗口

【LetMeFly】2009.使数组连续的最少操作数:去重排序 滑动窗口 力扣题目链接:https://leetcode.cn/problems/minimum-number-of-operations-to-make-array-continuous/ 给你一个整数数组 nums 。每一次操作中,你可以将 nums 中 任意 一个元…

从高频到低频:全面解析压控振荡器结构与应用场景

压控振荡器(简称VCO)是一种电子电路,其特点是输出的振荡频率能够随着输入电压的变化而连续改变。在VCO中,通过调控输入端的电压信号,可以相应地改变内部谐振电路的参数(如电感、电容或者变容二极管的电容值…

【智能算法】人工电场算法(AEFA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2019年,A Yadav等人受库伦定律和运动定律启发,提出了人工电场算法(Artificial Electric Field Algorithm,AEFA)。 2.算法原理 2.1算法思…

【Spring Cloud】服务容错中间件Sentinel入门

文章目录 什么是 SentinelSentinel 具有以下特征:Sentinel分为两个部分: 安装 Sentinel 控制台下载jar包,解压到文件夹启动控制台访问了解控制台的使用原理 微服务集成 Sentinel添加依赖增加配置测试用例编写启动程序 实现接口限流总结 欢迎来到阿Q社区 …

如何在项目中使用uni-ui组件库

1、安装uni-ui npm i dcloudio/uni-ui 2、组件自动引用 配置easycom 使用 npm 安装好 uni-ui 之后,需要配置 easycom 规则,让 npm 安装的组件支持 easycom 打开项目根目录下的 pages.json 并添加 easycom 节点: // pages.json {"e…

maya节点绕轴旋转

目录 旋转后并尝试冻结变换 绕x轴旋转90度 使用Python脚本 使用图形界面 使用MEL脚本 绕y轴旋转90度 使用Python脚本 ok 旋转后并尝试冻结变换 import maya.cmds as cmdsdef adjust_root_rotation_for_export(joint_name):# 选择根节点cmds.select(joint_name)# 应用旋…

HTML转EXE工具(HTML App Build)永久免费版:24.4.9.0

最新版本的HTML2EXE即将发布了。自从去年发布了HTML2EXE之后,我就正式上班了,一直忙于工作,实在没有时间更新(上班时间不能做),很多网友下载使用,反应很好,提出了一些改进的建议&…

【2023】LeetCode HOT 100——二叉树

目录 1. 二叉树的中序遍历1.1 C++实现1.2 Python实现1.3 时空分析2. 二叉树的最大深度2.1 C++实现2.2 Python实现2.3 时空分析3. 翻转二叉树3.1 C++实现3.2 Python实现3.3 时空分析4. 对称二叉树4.1 C++实现

【代码随想录】day39

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、62.不同路径二、63. 不同路径 II 一、62.不同路径 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> path;path.res…

感知定位篇之机器人感知定位元件概述(上)

欢迎关注微信公众号 “四足机器人研习社”&#xff0c;本公众号的文章和资料和四足机器人相关&#xff0c;包括行业的经典教材、行业资料手册&#xff0c;同时会涉及到职业知识学习及思考、行业发展、学习方法等一些方面的文章。 目录 |0.概述 |1.常用传感元件 1.1视觉传感器…

C语言什么是外部函数?怎么⽤?

一、问题 什么是外部函数呢&#xff1f;怎么使⽤&#xff1f; 二、解答 外部函数在整个源程序中都有效&#xff0c;其定义的⼀般形式如下。 extern 类型声明符 函数名(形参表); 例如&#xff1a; extern int f(int a,int b); 调⽤外部函数时&#xff0c;需要对其进⾏声明。…

医疗器械常见法规和标准

在医疗器械行业找工作&#xff0c;有些JD上会明确要求熟悉相关的医疗器械法规和标准&#xff0c;比如&#xff1a;ISO13485、NMPA、CE、IEC62304、IEC60601、IEC14971等等&#xff0c;根据这些我来简单总结下&#xff1a; ISO 13485&#xff08;医疗器械质量管理体系&#xff0…

750万人受影响,印度电子巨头boAt重大数据泄露事件

近日&#xff0c;印度消费电子巨头boAt遭遇重大数据泄露事件&#xff0c;超过750万客户的个人数据遭到泄露&#xff0c;泄露的个人数据包括姓名、地址、联系电话、电子邮件 ID 和客户 ID 以及其他敏感信息&#xff0c;目前这些泄露数据正在暗网上流传。 boAt Lifestyle数据库被…

【数据结构】考研真题攻克与重点知识点剖析 - 第 8 篇:排序

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

【干货】【常用电子元器件介绍】【集成电路】(一)--集成电路的类型和主要参数

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。 集成电路是一种采用特殊工艺,将晶体管、电阻、电容等元件集成在硅基片上而形成的 具有特定功能的器件,英文名称为Integrated Circuit,缩写为IC,俗称芯片。集成电路能执 行一些特定的功能,如…

Leetcode 438. 找到字符串中所有字母异位词和Leetcode 454. 四数相加 II

文章目录 Leetcode 438. 找到字符串中所有字母异位词题目描述C语言题解和思路解题思路 Leetcode 454. 四数相加 II题目描述C语言题解和解题思路解题思路 Leetcode 438. 找到字符串中所有字母异位词 题目描述 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子…

Android 包命名规范

Android包目录的命名规范会直接影响到整个APP攻城后期的开发效率和拓展性。 常用两种命名方式&#xff1a;PBL&#xff08;package by layer ) 和PBF(pakcage by Feature) layer 英/ˈleɪə(r)/ 翻译&#xff1a;层 feature 英/ˈfiːtʃə(r)/ 翻译&#xff1a;特色 1 Pac…

【吊打面试官系列】Java高并发篇 - 在 Java 中 Executor 和 Executors 的区别?

大家好&#xff0c;我是锋哥。今天分享关于 【在 Java 中 Executor 和 Executors 的区别&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 在 Java 中 Executor 和 Executors 的区别&#xff1f; Executors 工具类的不同方法按照我们的需求创建了不同的线程池&am…

入职后,你能为公司带来什么

几乎所有人都知道简历的重要性,觉得应该把简历写好,但由于以往大家套用的模板类似,而且借鉴的简历也都是平铺直叙的描写基本信息、教育背景、项目经历等信息,其实很多人也知道凸显亮点的重要性,但总是无从下手。 造成这种情况很根源的一个问题在于,很多人觉得自己入职后…

代码的重构

代码的重构 1. 代码的重构2. 创建牌相关工具类3. 创建图层相关工具类4. 修改LayerUtil.java 代码的重构 学习于bilibili 春娇与志明 1. 代码的重构 将之前的代码进行封装和重构 方便之后的阅读和维护 故将代码封装&#xff0c;对外提供一个统一访问的入口 2. 创建牌相关工具…