安卓 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"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <android.opengl.GLSurfaceView
        android: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 应用开发实践指南》

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

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

相关文章

EMMC的介绍

1、emmc的含义 eMMC (Embedded Multi Media Card)是MMC协会订立、主要针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC在封装中集成了一个控制器&#xff0c;提供标准接口并管理闪存&#xff0c;使得手机厂商就能专注于产品开发的其它部分&#xff0c;并缩短向市场推出产…

ChatGPT提示技巧——零,一和少量示例提示

ChatGPT提示技巧——零&#xff0c;一和少量示例提示 ​ 零样本(zero-shot)、少样本(few-shot)和单样本(one-shot)提示是用于在最少或没有示例的情况下从ChatGPT生成文本的技巧。这些技巧用于当某个具体任务有限定数据的时候或者任务是新的并且没有很好的定义的时候。 提示格…

吴恩达deeplearning.ai:数据增强数据合成迁移学习

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 让我们看看为你的程序添加数据的技巧。在构建神经网络的时候&#xff0c;我们总是想要更多的数据&#xff0c;但是获取更多的数据往往是十分昂贵又缓慢的。相反地&#xff0c;添加数据的另一…

例行性工作(at,crontab)

目录 单一执行的例行性工作at 语法 选项 时间格式 at的工作文件存放目录 at工作的日志文件 实例 命令总结&#xff1a; 循环执行的例行性工作crond 语法 选项 crontab工作调度对应的系统服务 crontab工作的日志文件 用户定义计划任务的文件所在目录 动态查看 crontab文件格式 文…

ThreadLocal, InheritableThreadLocal和TransmittableThreadLocal

ThreadLocal, InheritableThreadLocal和TransmittableThreadLocal ThreadLocal(TL) 后续部分地方会使用ThraedLocal简称为TL 什么是TL? ThreadLocal是Java中的一个类, 也称为线程本地变量, 它提供了线程局部变量的功能。每个ThreadLocal对象都可以存储一个线程本地的变量副…

Service Mesh:如何为您的微服务架构带来可靠性和灵活性

在云原生架构中&#xff0c;Service Mesh 技术成为了微服务架构中不可或缺的一环。本文灸哥将和你一起探讨 Service Mesh 技术的原理、功能和实践&#xff0c;帮助架构师和开发人员更好地理解和应用这一关键技术。 1、Service Mesh 技术概述 Service Mesh 又称为服务网格&…

Vue3+ts(day01:Vue3简介、初始化Vue3工程)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…

事务失效的八种情况!!!!

一、非publi修饰的方法。 /*** 私有方法上的注解&#xff0c;不生效&#xff08;因私有方法Spring扫描不到该方法&#xff0c;所以无法生成代理&#xff09;*/ Transactional private boolean test() {//test code }二、类内部访问。 类内部非直接访问带注解标记的方法 B&…

乐高wedo硬件编程

文章目录&#xff1a; 一&#xff1a;wedo零件认识 1.砖块 2.薄片 3.滑片 4.梁 5.轴 6.销 7.齿轮 8.连接器 9.装饰零件 10.电子零件 11.轮胎 12.柔性零件 二&#xff1a;软件下载安装 1.下载安装 2.使用 三&#xff1a;软件里面的指令模块介绍 绿色部分 …

Leetcode3071. 在矩阵上写出字母 Y 所需的最少操作次数

Every day a Leetcode 题目来源&#xff1a;3071. 在矩阵上写出字母 Y 所需的最少操作次数 解法1&#xff1a;模拟 统计 Y 中的元素出现次数&#xff0c;记到一个长为 3 的数组 cnt1 中。统计不在 Y 中的元素出现次数&#xff0c;记到一个长为 3 的数组 cnt2 中。 计算最多…

Linux-socket套接字

前言 在当今数字化时代&#xff0c;网络通信作为连接世界的桥梁&#xff0c;成为计算机科学领域中至关重要的一部分。理解网络编程是每一位程序员必备的技能之一&#xff0c;而掌握套接字编程则是深入了解网络通信的关键。本博客将深入讨论套接字编程中的基本概念、常见API以及…

(五)关系数据库标准语言SQL

注&#xff1a;课堂讲义使用的数据库 5.1利用SQL语言建立数据库 5.1.1 create Database 5.1.2 create schema...authorization... 创建数据库和创建模式的区别&#xff1a; 数据库是架构的集合&#xff0c;架构是表的集合。但在MySQL中&#xff0c;他们使用的方式是相同的。 …

电脑工作电压是多少你要看看光驱电源上面标的输入电压范围

要确定电脑的工作电压&#xff0c;必须查看电源上标注的输入电压范围。 国内法规规定民用220V电压范围为10%-15%&#xff0c;也就是说通信220V电压正常范围为187--242V&#xff0c;供电设备一般为180V。 --250V电压范围&#xff0c;即正常情况下电脑电源电压不低于187V即可工作…

4.1k star,官方出品的redis桌面管理工具——redislnsight

导航 令人抓狂的大key加载RedisInsight 简介RedisInsight的亮点GitHub 地址安装和使用RedisInsight 下载安装 使用RedisInsight redis数据库可视化直观的CLI&#xff08;Command-Line Interface&#xff09;日志分析和命令分析 结语参考 令人抓狂的大key加载 工欲善其事必先利…

查询IP地址保障电商平台安全

随着电子商务的快速发展&#xff0c;网购已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;网络交易安全一直是人们关注的焦点之一&#xff0c;尤其是在面对日益频发的网络诈骗和欺诈行为时。为了提高网购平台交易的安全性&#xff0c;一种有效的方法是通过查询IP地址…

每周一算法:A*(A Star)算法

八数码难题 题目描述 在 3 3 3\times 3 33 的棋盘上&#xff0c;摆有八个棋子&#xff0c;每个棋子上标有 1 1 1 至 8 8 8 的某一数字。棋盘中留有一个空格&#xff0c;空格用 0 0 0 来表示。空格周围的棋子可以移到空格中。要求解的问题是&#xff1a;给出一种初始布局…

算法优化 —— 注意力机制篇

文章目录 前言一、EMA 高效多尺度注意力机制(ICASSP2023)二、BiFormer: 基于动态稀疏注意力构建高效金字塔网络架构(2023CVPR)前言 提示:这里可以添加本文要记录的大概内容: 一、EMA 高效多尺度注意力机制(ICASSP2023) 原论文链接 代码如下: class EMA(nn.Module

数据结构-线段树

&#x1f4d1;前言 本文主要是【线段树】——线段树简单使用的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&…

R实现热图与网络图组合并显示显著性

大家好&#xff0c;我是带我去滑雪&#xff01; 热图和网络图分别展示了数据的不同方面。热图可用于显示变量之间的相关性或模式&#xff0c;而网络图则可用于显示节点之间的连接关系。通过将它们组合在一起&#xff0c;可以更全面地展示数据之间的关系和结构。下面开始代码实战…

STM32CubeIDE基础学习-STM32CubeIDE软件快捷键介绍

STM32CubeIDE基础学习-STM32CubeIDE软件快捷键介绍 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件快捷键介绍前言第1章 查看快捷键方法第2章 设置快捷键方法第3章 常用快捷键示例总结 前言 这个STM32CubeIDE软件使用的是Eclipse框架的开发环境&#xff0c;所以所使用的快捷…