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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能电网将科技拓展至工厂之外的领域

【摘要/前言】 物联网已然颠覆我们日常生活的许多层面。在家居方面,家电变成连网设备,不仅让我们能控制灯光与上网购物,甚至在出门时提供安全功能。在工业领域,智能工厂改变产品制造的方式。工业物联网(IIoT)不仅让制造商更加敏捷…

启明智显M4核心板驱动17寸屏 为您打造无与伦比的视觉盛宴

近日,启明智显推出M4核心板驱动17寸屏,8 Link LVDS接口下1280*1024分辨率为用户展现了超强的视觉体验。 M4核心板采用纯国产架构,内置了16位DDR内存,为设备提供强大的数据处理能力和高效的运行速度。无论是处理复杂的任务还是进…

关于create table as

create table as这个语句的不熟悉,这个语句建表导致的表主键、索引、auto_increment的丢失。 该语句对"列结构"是可以正常复制的,只有索引、主键等信息会丢失,原以为"AUTO_INCREMENT"是属于id这一列的列信息,…

JSON字符串中获取一个特定字段的值

JSON字符串中获取一个特定字段的值 一、方式一,引用gson工具二、方式二,使用jackson三、方式三,使用jackson转换Object四、方式四,使用hutool,获取报文数组数据 一、方式一,引用gson工具 测试报文&#xf…

医学图像目标跟踪论文阅读笔记 2024.03.14~2024.04.01

“Moving vehicle tracking based on improved tracking–learning–detection algorithm” 2019年 期刊 IET Computer Vision 计算机科学4区 基于改进后的TLD算法(ITLD,improved TLD)对车辆进行long-term单目标跟踪。 改进内容&#xff1…

Authing 正在寻找云原生应用 / Infra 开发者

我们是 Authing,成立于 2019 年,我们是一家平均年龄 95 后的年轻创业公司,现在是中国最大、最领先的身份云基础设施(Identity as a Service, IDaaS)提供商,我们的产品服务了全国各地数百家客户和数十家世界…

思迈特:“人工智能+”浪潮里,国产BI到了关键时刻

作为首个“AI程序员”,Devin最近参与了一系列工作,包括在人力资源外包平台Upwork完成编程工作;潜入一家明星创业公司内部群交流,为公司CTO调整代码方案等。这让整个软件工程行业大受震撼,程序员留言“刷屏”。 “AI…

做海外问卷调查有什么技巧和方法?纯干货讲解

做海外问卷调查无外乎几个步骤:选国家、做人设、测题目、刷题目。每个步骤都有一定的技巧,但是它的技巧成分不是很明显。 国家的选择一般以发达国家为主,国家越发达问卷的数量越多,正常白天做题主流国家选择:新加坡、…

蓝桥杯每日一题:有序分数(递归)

给定一个整数 N,请你求出所有分母小于或等于 N,大小在 [0,1] 范围内的最简分数,并按从小到大顺序依次输出。 例如,当 N5 时,所有满足条件的分数按顺序依次为: 0/1,1/5,1/4,1/3,2/5,12/,35,2/3,3/4,4/5,1/…

HarmonyOS实战开发-存储空间统计(仅对系统应用开放)

介绍 本示例通过应用程序包管理、应用空间统计与卷管理模块,实现了查看当前设备存储空间信息、所有安装的应用的存储信息、所有可用卷的存储信息的功能。 效果预览 使用说明: 1.主页面会展示当前设备存储使用的详细信息。 2.点击“应用”,…

继续教育山东第一医科大学临床医学试题及答案,分享几个实用搜题和学习工具 #职场发展#职场发展#笔记

大学生必备的搜题工具,专业课本习题、电子版教材、考研资料、英语四六级等考试题目也能一并搜索,每道题目都有详细的讲解,每个都堪称大学神器。 1.灵兔搜题 这是一个公众号 医学、财经、建筑、计算机、高数、土木.........都可以搜索。 下…

淘宝商品描述API接口:轻松获取商品信息的新途径

淘宝商品描述API接口是淘宝开放平台提供的一种高效、便捷的新途径,旨在帮助开发者轻松获取淘宝商品的详细描述信息。通过这一接口,商家、开发者和用户都能获得商品标题、描述、属性、价格、图片等关键信息,从而满足各种业务需求。 在使用淘宝…

centos7.2系统部署ZooKeeper集群和Kafka集群(集群应用系统商城前置环境)

本次实验将使用centos7.2系统部署部署ZooKeeper集群因为Kafka依赖于ZooKeeper,所以我们一并进行部署。 实验所示的资源软件已上传至百度网盘,需要自取。 链接:https://pan.baidu.com/s/1a-7_iAIX0DBAMkF9bhiTcA?pwd2333 提取码&#xff1…

BLIP 算法阅读记录---一个许多多模态大语言模型的基本组件

论文地址:😈 一、环境配置以及数据集准备 数据集准备 官网提供了下载数据集json文件的接口。但是很可能打不开,因为其放在了谷歌云上 https://storage.googleapis.com/ 不过不要担心,网页打不开,咱们可以利用python去…

助力大健康产业发展,深兰科技AI数字伙伴“益小青”亮相世界健博会

4月7日至4月10日,以“健康共同体,科技创未来”为主题的2024年(第六届)世界大健康博览会在武汉隆重举行。大会吸引了千余家知名企业、单位参展,200余位大健康领域重要嘉宾参会。深兰科技携国内首款AI心理陪伴数字人——益小青在展会上公开亮相…

RSA公钥格式公钥结构解析

一次发现RSA der格式公钥2048位(256bytes)有的长度292有的长度294于是分析了下: [root8f64ba75cbd1 tmp]# ll anewpub.der 1_pub.der -rw------- 1 root root 294 Apr 8 02:48 1_pub.der -rw------- 1 root root 292 Apr 8 02:25 anewpub…

为什么网站速度很重要?

网站速度,也被称为页面加载速度或网站性能,是指用户访问网站时,从发出请求到浏览器完全加载并显示网页内容所需的时间。这个速度的快慢直接影响用户的体验和对网站的整体评价。 为什么网站速度很重要? 网站速度之所以非常重要&a…

数仓调优实战:GUC参数调优

1. 前言 适用版本:【8.1.1及以上】 GaussDB(DWS)性能调优系列专题文章,介绍了数据库性能调优的思路和总体策略。在系统级调优中数据库全局的GUC参数对整体性能的提升至关重要,而在语句级调优中GUC参数可以调整估算模型,选择查询…

移动医保支付

传统就医流程中,涉及“三长一短”的难题,因此根据国家政策及互联网的能力支持,用户在微信或者支付宝上激活医保电子凭证之后,无需在医院窗口排队,即可通过微信小程序或者公众号、支付宝小程序缴纳医保挂号或医保门诊费…

Java常用API_System——常用方法及代码演示

1.System.exit(int status) 方法的形参int status为状态码,如果是0,说明虚拟机正常停止,如果非0,说明虚拟机非正常停止。需要将程序结束时可以调用这个方法 代码演示: public class Test {public static void main(S…