当前位置: 首页 > news >正文

安卓 OpenGL ES 学习笔记

文章目录

    • OpenGL 学习笔记
      • OpenGL 是什么?
      • OpenGL ES是什么?
      • 怎么用?
        • hello world
        • 如何实现动画效果
      • 参考文章

OpenGL 学习笔记

OpenGL 是什么?

OpenGL(Open Graphics Library)是一个跨平台的图形编程接口,用于渲染2D和3D图形。它提供了一系列函数和状态机,用于操作图形对象、设置渲染状态和执行图形操作。

OpenGL具有以下特点:

1、跨平台:OpenGL可以在多个操作系统上运行,包括Windows、MacOS、Linux等。

2、硬件加速:OpenGL可以利用计算机的图形硬件加速渲染过程,提高图形性能。

3、开放标准:OpenGL是一个开放的标准,由Khronos Group维护和发展,可以由各个硬件和软件厂商实现和扩展

4、低级接口:OpenGL是一个底层的图形接口,提供了对图形硬件的直接访问,开发者可以更加灵活地控制图形渲染过程。

使用OpenGL可以实现各种图形效果,包括渲染三维模型、绘制2D图形、实现光照效果、进行纹理映射等。它广泛应用于游戏开发、计算机辅助设计、科学可视化等领域。

OpenGL ES是什么?

OpenGL ES(OpenGL for EmbeddedSystems)是一种用于嵌入式系统的图形渲染API(应用程序编程接口)。它是OpenGL的子集,专门设计用于在移动设备、游戏机和其他嵌入式系统上进行图形渲染。

OpenGL ES提供了一组函数和状态机,用于管理图形渲染管线,实现2D和3D图形的绘制和渲染。它支持各种图形特效、纹理映射、光照、深度测试等功能,可以实现高性能的图形渲染。

OpenGL ES有三个版本:OpenGL ES 1.0、OpenGL ES 2.0和OpenGL ES
3.0。每个版本都有不同的特性和功能集,适用于不同的硬件和应用需求。

怎么用?

我是看 安卓 OpenGL ES 2.0 完全入门(一):基本概念和 hello world 学习的,大佬贴心的写了 demo ,GitHub 获取 下载即用,非常贴心。

hello world

1、准备一个布局文件,使用 GLSurfaceView 控件,用于最终的画面显示

<?xml version="1.0" encoding="utf-8"?>
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><android.opengl.GLSurfaceViewandroid:id="@+id/surface"android:layout_width="match_parent"android:layout_height="match_parent"/>
</FrameLayout>

2、绑定 GLSurfaceView 设置相关参数,最重要的是设置一个 Renderer,大部分的工作就是在这个 Renderer 中进行

mGLSurfaceView = (GLSurfaceView) findViewById(R.id.surface);mGLSurfaceView.setEGLContextClientVersion(2);
mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
mRenderer = new MyRenderer(this);
mGLSurfaceView.setRenderer(mRenderer);
mGLSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);

3、新建一个 Renderer ,这里有很多的东西需要配置初始化,例如:Vertex Buffer、Shader、Viewport、Projection Matrix、Texture 等等。

GLSurfaceView.Renderer是Android中用于渲染OpenGL图形的接口。它定义了三个主要的回调方法,用于处理OpenGL图形的初始化、绘制和变化。

onSurfaceCreated方法:在Surface被创建时调用,用于进行OpenGL的初始化工作,比如设置背景色、启用深度测试等。

onSurfaceChanged方法:在Surface尺寸变化时调用,比如屏幕旋转或者窗口大小改变。在这个方法中,可以更新OpenGL的视口(Viewport)和投影矩阵(Projection
Matrix)等。

onDrawFrame方法:在每一帧绘制时调用,用于实际的绘制操作。在这个方法中,可以进行顶点数据的绑定、纹理的绑定、着色器的使用等。

OK,简单记了一下实现 OpenGL 步骤,然后具体实现中有非常多的概念以及操作细节需要去理解与记忆 ,也用思维导图头脑风暴了一下。

在这里插入图片描述

如何实现动画效果

1、每一帧绘制时,清除上一帧的颜色缓冲区再绘制纹理
2、通过插值器更新设置的参数(坐标,矩阵等)即可

@Override
public void onDrawFrame(GL10 unused) {// 清除颜色缓冲区GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);// 绘制纹理
}

参考文章

安卓 OpenGL ES 2.0 完全入门(一):基本概念和 hello world

OpenGL 学习系列—投影矩阵

《OpenGL ES 应用开发实践指南》

相关文章:

安卓 OpenGL ES 学习笔记

文章目录 OpenGL 学习笔记OpenGL 是什么&#xff1f;OpenGL ES是什么&#xff1f;怎么用&#xff1f;hello world如何实现动画效果 参考文章 OpenGL 学习笔记 OpenGL 是什么&#xff1f; OpenGL&#xff08;Open Graphics Library&#xff09;是一个跨平台的图形编程接口&…...

git分布式管理-头歌实验冲突处理、忽略文件

一、解决冲突 任务描述 在团队协作开发过程中&#xff0c;可能你和团队中的其他成员&#xff0c;都修改了某个文件的某一部分内容&#xff0c;且其他成员已将该修改推送到了远程仓库。这样当你需要合并他的代码的时候&#xff0c;可能就会在内容上出现冲突&#xff0c;这个时候…...

【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现

&#x1f31e;前言 这里我们会实现一个项目&#xff1a;在linux操作系统下基于OpenCV和Socket的人脸识别系统。 目录 &#x1f31e;前言 &#x1f31e;一、项目介绍 &#x1f31e;二、项目分工 &#x1f31e;三、项目难题 &#x1f31e;四、实现细节 &#x1f33c;4.1 关…...

零售EDI:劳氏 Lowe‘s EDI项目案例

通过 EDI&#xff0c;企业与Lowes之间可以直接交换各种商业文档&#xff0c;如订单、发票、收据等&#xff0c;从而实现信息的实时交换&#xff0c;提高了供应链的效率和准确性。在现代供应链管理中&#xff0c;EDI 已经成为了不可或缺的重要工具。 作为一家拥有多条业务线的企…...

为什么不用 index 做 key?

“在 Vue 中&#xff0c;我们在使用 v-for 渲染列表的时候&#xff0c;为什么要绑定一个 key&#xff1f;能不能用 index 做 key&#xff1f;” 在聊这个问题之前我们还得需要知道 Vue 是如何操作 DOM 结构的。 虚拟DOM 我们知道&#xff0c;Vue 不可以直接操作 DOM 结构&am…...

Linux虚拟机安装Redis

官网下载压缩包&#xff1a;官网链接&#xff0c;然后将对应的tar.gz压缩包放入虚拟机下的/opt目录下。由于redis是C语言开发的&#xff0c;因此需要安装gcc编译器来编译代码&#xff0c;我们下载的压缩包里面是源代码&#xff0c;需要编译。通过yum install gcc指令下载C语言的…...

网络安全: Kali Linux 进行 SSH 渗透与防御

目录 一、实验 1.环境 2.nmap扫描目标主机 3.Kali Linux 进行 SSH 渗透 3.Kali Linux 进行 SSH 防御 二、问题 1.SSH有哪些安全配置 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统版本IP备注Kali Linux2022.4 192.168.204.154&#xff08;动态&…...

近年来文本检测相关工作梳理

引言 场景文本检测任务&#xff0c;一直以来是OCR整个任务中最为重要的一环。虽然有一些相关工作是端对端OCR工作的&#xff0c;但是从工业界来看&#xff0c;相关落地应用较为困难。因此&#xff0c;两阶段的OCR方案一直是优先考虑的。 在两阶段中&#xff08;文本检测文本识…...

文件系统事件监听

文件系统事件和网络IO事件一样&#xff0c;也可以通过epoll或者IOCP 事件管理器统一调度&#xff0c;当所监控的文件或文件夹发生了增删改的事件时&#xff0c;就会触发事件回调&#xff0c;进行事件处理。很常见的应用&#xff0c;如配置文件立即生效功能&#xff0c;就可以通…...

探秘HTTPS:如何通过SSL/TLS保证网络通信安全

目录 引言 详解HTTPS加密实现机制 SSL/TLS工作原理 结论 引言 随着网络安全威胁的日益增加&#xff0c;HTTPS通过SSL&#xff08;Secure Sockets Layer&#xff09;和TLS&#xff08;Transport Layer Security&#xff09;协议提供的加密技术变得至关重要。这些技术保证了用…...

Java算法之动态规划

Java算法之动态规划 前言 ​ 最近这一段时间一直在刷算法题&#xff0c;基本上一有时间就会做一两道&#xff0c;这两天做了几道动态规划的问题&#xff0c;动态规划之前一直是我比较头疼的一个问题&#xff0c;感觉好复杂&#xff0c;一遇到这样的问题就想跳过&#xff0c;昨…...

C++从零开始的打怪升级之路(day47)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于set和map的知识点 1.关联式容器 在前面&#…...

香橙派AIpro开发板开箱测评

2023年12月&#xff0c;香橙派联合华为发布了基于昇腾的Orange Pi AIpro开发板&#xff0c;提供8/20TOPS澎湃算力&#xff0c;能覆盖生态开发板者的主流应用场景&#xff0c;让用户实践各种创新场景&#xff0c;并为其提供配套的软硬件。香橙派AIpro开发板一经发布便吸引了众多…...

ISP基础概述

原文来自ISP 和摄像头基本知识 本文主要介绍ISP&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花 &#x1f3…...

C++第一弹---C++入门(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 【C详解】 C入门 1、C关键字(C98) 2、命名空间 2.1、命名空间定义 2.2、命名空间使用 3、C输入&输出 4、缺省参数 4.1、缺省参数概念 4.2、缺省参…...

VScode格式化快捷键

vscode格式化代码快捷键 如何使用快捷键格式化代码。使用Java的格式去设置&#xff0c;发现不起作用。 在这里记录一下&#xff1a; 在Windows中&#xff0c;vscode格式化代码快捷键是“ShiftAltF”&#xff1b; 在Mac中&#xff0c;vscode格式化代码快捷键是“ShiftOption…...

HCIP---IS-IS协议

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.IS-IS协议概述 IS-IS是一种基于链路状态的内部网关协议&#xff08;IGP&#xff09;&#xff0c;它使用最短路径优先算法&#xff08;SPF或Dijkstra&#xff09;进行路由计算。这种协议在自治…...

突破编程_C++_设计模式(组合模式)

1 组合模式的基本概念 C中的组合模式是一种对象结构型模式&#xff0c;它将多个对象组合成树形结构&#xff0c;以表示具有整体-部分关系的层次结构。在这个模式中&#xff0c;对单个对象&#xff08;叶子对象&#xff09;与组合对象&#xff08;容器对象&#xff09;的使用具…...

010Editor汉化版+下载+注册码+模板bug

项目场景&#xff1a; 这天我想使用我的不知名的一个破解版本的010Edit来查看一个EXE程序&#xff0c;并想使用模板功能&#xff0c;但是发现没有该模板还无法下载最新模板 问题描述 010Edit联网后需要注册码&#xff1a; 010 Editor 激活码生成器 使用方法 参照教程使用0…...

js【详解】BOM

浏览器对象模型 &#xff08;Browser obiect Mode 简称 BOM&#xff09; 浏览器对象即 window&#xff0c;调用window对象的属性和方法时&#xff0c;可以省略window window 常用的属性 Navigator 常用于获取浏览器的信息 navigator.userAgent;火狐浏览器范例&#xff1a; “…...

F28335项目功耗优化实战:如何通过精细管理外设时钟(PCLKCR)来省电

F28335项目功耗优化实战&#xff1a;精细管理外设时钟&#xff08;PCLKCR&#xff09;的省电艺术 在电池供电的电机控制或物联网传感节点开发中&#xff0c;系统功耗直接决定了产品的续航能力。TMS320F28335作为一款高性能DSP控制器&#xff0c;其动态功耗往往成为系统优化的重…...

TinyTemplateEngine:嵌入式行级模板引擎深度解析

1. TinyTemplateEngine&#xff1a;面向资源受限嵌入式平台的行级模板引擎深度解析在嵌入式Web服务、动态HTML生成、设备状态报告等场景中&#xff0c;开发者常需将运行时变量注入静态文本模板。传统方案&#xff08;如String拼接、sprintf全量缓存&#xff09;在Arduino Uno&a…...

STM32 NVIC优先级设置详解:以红外传感器计数为例

STM32 NVIC优先级设置详解&#xff1a;以红外传感器计数为例 在嵌入式系统开发中&#xff0c;中断管理是确保实时响应和系统稳定性的核心机制。STM32微控制器凭借其强大的NVIC&#xff08;嵌套向量中断控制器&#xff09;为开发者提供了灵活的中断优先级配置方案。本文将以红外…...

PCIe信号完整性避坑指南:Gen3物理层均衡训练与时钟补偿全流程

PCIe Gen3信号完整性实战&#xff1a;从均衡训练到时钟补偿的深度解析 当PCIe Gen3以8GT/s的速率在电路板上传输数据时&#xff0c;信号完整性问题从理论挑战变成了实际工程中的"拦路虎"。与Gen1/Gen2时代不同&#xff0c;Gen3的信号完整性管理不再是简单的参数调整&…...

Rust错误处理实战

Rust错误处理实战后端转 Rust 的萌新&#xff0c;ID "第一程序员"——名字大&#xff0c;人很菜&#xff08;暂时&#xff09;。正在跟所有权和生命周期死磕&#xff0c;日常记录 Rust 学习路上的踩坑经验和"啊哈时刻"&#xff0c;代码片段保证能跑。保持学…...

如何免费使用Upscayl:AI图像超分辨率完整指南

如何免费使用Upscayl&#xff1a;AI图像超分辨率完整指南 【免费下载链接】upscayl &#x1f199; Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl 想要将模糊的低分辨…...

TP-Link 多款路由器曝未修复零日漏洞:栈溢出可致远程代码执行,其他漏洞已被实际利用

目前&#xff0c;TP-Link 已确认多款路由器型号存在尚未修复的零日漏洞&#xff0c;同时该品牌其他漏洞已被真实网络攻击利用。 Amazon.com: TP-Link Archer AX10 AX1500 WiFi 6 Router Dual Band 1.5GHz Tri Core CPU TPLink : Electronics 零日漏洞详情与厂商响应 该零日漏…...

Golang怎么理解GC垃圾回收机制_Golang如何分析和优化Go的内存回收性能【详解】

Go GC 不会立即归还内存给操作系统&#xff0c;而是在空闲超时&#xff08;默认5分钟&#xff09;或内存压力突增&#xff08;如设置GOMEMLIMIT&#xff09;时由scavenger触发&#xff1b;pprof不显示mmap/cgo等OS层内存&#xff0c;RSS高于HeapSys 20%以上通常表明存在此类问题…...

ADC测量不准?可能是Vref惹的祸!手把手教你用万用表校准参考电压

ADC测量不准&#xff1f;可能是Vref惹的祸&#xff01;手把手教你用万用表校准参考电压 在嵌入式系统和电子测量领域&#xff0c;ADC&#xff08;模数转换器&#xff09;的精度直接影响整个系统的性能。许多工程师花费大量时间优化采样算法、滤波电路&#xff0c;却忽略了一个关…...

滚动轴承故障诊断的MATLAB分析方法:基于快速谱峭度与包络谱结合的研究方法

滚动轴承故障诊断MATLAB程序&#xff1a;快速谱峭度、谱峭度包络谱分析 滚动轴承故障诊断是机械工程领域的一个重要研究方向。滚动轴承是一种常见的机械元件&#xff0c;用于支撑和转动机械装置中的轴。然而&#xff0c;由于长时间使用或其他原因&#xff0c;滚动轴承可能会出现…...