鸿蒙原生应用元服务开发-WebGL网页图形库开发概述

WebGL的全称为Web Graphic Library(网页图形库),主要用于交互式渲染2D图形和3D图形。目前HarmonyOS中使用的WebGL是基于OpenGL裁剪的OpenGL ES,可以在HTML5的canvas元素对象中使用,无需使用插件,支持跨平台。WebGL程序是由JavaScript代码组成的,其中使用的API可以利用用户设备提供的GPU硬件完成图形渲染和加速。基本概念如下。

一、着色器

可以理解为运行在显卡中的指令和数据。在WebGL中,着色器是用OpenGL ES着色语言(GLSL)编写的。

完整的着色器包括顶点着色器和片元着色器。顶点着色器和片元着色器的交互则涉及到图片光栅化。

顶点着色器:最基本的任务是接收三维空间中点的坐标,将其处理为二维空间中的坐标并输出。

片元着色器:最基本的任务是对需要处理的屏幕上的每个像素输出一个颜色值。

图片光栅化:将顶点着色器输出的二维空间中的点坐标,转化为需要处理的像素并传递给片元着色器的过程。

二、缓冲区

驻存于内存中的JavaScript对象,存储着即将推送到着色器中的attribute对象。

三、着色器程序

将缓冲区中的数据推送到着色器中还需涉及“着色器程序”,一个负责关联着色器和缓冲区的JavaScript对象。一个WebGLProgram 对象由两个编译过后的 WebGLShader 组成,即顶点着色器和片段着色器(均由 GLSL 语言所写)。

四、运作机制

图1 WebGL运作机制

应用前端HTML5绘制界面组件。

Native API完成前端JavaScript与C++代码交互。

JavaScript engine为图形框架,为WebGL模块提供绘制对象Surface。

WebGL模块对外暴露OpenGL ES的GPU绘制接口。

中间接口层EGL(Embedded Graphics Library)完成不同平台的适配。

本文参考引用HarmonyOS官方开发文档,基于API9。

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

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

相关文章

Hudi入门

一、Hudi编译安装 1.下载 https://archive.apache.org/dist/hudi/0.9.0/hudi-0.9.0.src.tgz2.maven编译 mvn clean install -DskipTests -Dscala2.12 -Dspark33.配置spark与hudi依赖包 [rootmaster hudi-spark-jars]# ll total 37876 -rw-r--r-- 1 root root 38615211 Oct …

【Python从入门到进阶】50、当当网Scrapy项目实战(三)

接上篇《49、当当网Scrapy项目实战(二)》 上一篇我们讲解了的Spider与item之间的关系,以及如何使用item,以及使用pipelines管道进行数据下载的操作,本篇我们来讲解Scrapy的多页面下载如何实现。 一、多页面下载原理分…

【Leetcode每日一刷】滑动窗口:209.长度最小的子数组

一、209.长度最小的子数组 1.1:题目 题目链接 1.2:解题思路 题型:滑动窗口;时间复杂度:O(n) 🪧 滑动窗口本质也是双指针的一种技巧,特别适用于字串问题 ❗❗核心思想/ 关键:左右…

A5自媒体wordpress主题模板

一个简洁的wordpress个人博客主题,适合做个人博客,SEO优化效果挺不错的。 https://www.wpniu.com/themes/204.html

前端学习之行内和块级标签

行内标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>span</title> </head> <body><!-- 行内标签特点&#xff1a;1、不换行,一行可以放多个2、默认宽度内容撑开代表&#…

谈谈我的自媒体创作真实感悟

因为我有数十款APP和小程序&#xff0c;基本都是些辅助内容创作的工具&#xff0c;于是我就顺水推舟做了几个自媒体账号&#xff1a;微信公众号&#xff0c;抖音&#xff0c;知乎&#xff0c;小红书&#xff0c;CSDN等&#xff0c;账号的名字都是全赞工程师。 目前这些号有收入…

分享一些实用性的大语言模型(GitHub篇)

1.多模态大模型 GitHub网址&#xff1a;haotian-liu/LLaVA&#xff1a;[NeurIPS23 Oral] 视觉指令调优 &#xff08;LLaVA&#xff09; 构建&#xff0c;旨在实现 GPT-4V 级别及以上的能力。 (github.com) 下面是LLaVA模型的介绍&#xff0c;作者都有一直维护和更新&#xff0c…

CSS居中对齐 (垂直居中)

内部块级元素的高度要小于容器(父元素) 方案一&#xff1a;行高 容器高度&#xff08;单行内联元素&#xff09; 限制条件&#xff1a;仅用于单行内联元素 display:inline 和 display: inline-block; 给容器添加样式 height: 100px;line-height: 100px;<!DOCTYPE html>…

TimescaleDB 开源时序数据库

文章目录 1.TimescaleDB介绍2.Hypertable 和 chunk3.Hypertable4.Hypertable操作 开源中间件 # TimescaleDBhttps://iothub.org.cn/docs/middleware/ https://iothub.org.cn/docs/middleware/timescale/timescale-summary/1.TimescaleDB介绍 TimescaleDB是基于PostgreSQL数据…

MATH数据集分享

来源: AINLPer公众号&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2024-3-10 很多创新性的研究都可能会遇到数学问题&#xff0c;但是这项技能对于计算机来说仍然是个不小的挑战。为了衡量模型在解决数学问题上的表现。UC…

C++11的简单介绍(上)

1.C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合并…

Go语言必知必会100问题-20 切片操作实战

前言 有很多gopher将切片的length和capacity混淆&#xff0c;没有彻底理清这两者的区别和联系。理清楚切片的长度和容量这两者的关系&#xff0c;有助于我们合理的对切片进行初始化、通过append追加元素以及进行复制等操作。如果没有深入理解它们&#xff0c;缺少高效操作切片…

一文彻底搞懂MyISAM和InnoDB区别

文章目录 1. 是否支持行级锁2. 是否支持事务3. 是否支持外键4. 是否支持数据库异常崩溃后的安全恢复5. 是否支持 MVCC6. 索引实现7. 常见的几种 MySQL 存储引擎对比 MySQL 5.5版本之前&#xff0c;MyISAM引擎是MySQL的默认存储引擎&#xff0c;拥有全文索引、压缩和空间函数等特…

力扣——合并k个升序链表

文章目录 题目解析题目链接题目解析 算法讲解暴力解法利用优先级队列进行优化 代码解析 题目解析 题目链接 首先先把题目连接给大家奉上题目链接 题目解析 严格来说这个题目是非常容易理解的相信大家有了合并两个升序链表来理解这个题目就会非常容易理解了。这个题目的意思就…

LeetCode 654.最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums 构建的 最大二叉树…

Spring Security | Oauth2 /oauth/token自定义授权实现底层源码浅析与实现

Spring Security Oauth2 /oauth/token自定义授权源码分析实现过程&#xff0c;看了网上很多文章&#xff0c;分析和实现肯定存在不完整地方&#xff0c;可以在评论区指出交流。 1 /oauth/token入口 org.springframework.security.oauth2.provider.endpoint.TokenEndpoint Token…

java的参数传递机制(引用类型)

1.除了非引用类型的形参传递&#xff0c;还有引用类型的变量形参传递&#xff0c;但引用类型的形参变量传递与非引用类型是不同的&#xff01;&#xff01;&#xff01; public class MethodDemo2 {public static void main(String[] args) {int[] arr new int[]{10,20,30,9}…

MySQL入门到中级知识汇总2024

文章目录 1.揭开MySQL的神秘面纱2. SQL的基本命令实操3. 数据库的备份与恢复4. MySQL常用的数据类型&#xff08;列类型&#xff09;5. 数据类型之小数类型的使用6. 表的创建7. 表的修改8. mysql事务9. mysql表类型和存储引擎10. mysql的视图11. mysql的管理 1.揭开MySQL的神秘…

20.2 nginx

20.2 nginx 1. 学习目标2. 介绍2.1 正向代理2.2 反向代理2.3 动态静态资源分离2.4 nginx优缺点3. 安装3.1 Linux安装****************************************************************************************************************************************************…

Charles-抓包工具的使用

文章目录 Charles简介与安装Charles的简介Charles的安装Charles 安装证书 抓包在PC端抓取HTTPS请求在移动端进行抓包移动端配置Androd端配置iOS端配置 Charles使用小技巧&#xff1a; 模拟慢速网络 Charles简介与安装 Charles的简介 Charles 是在 PC 端常用的网络封包截取工具…