安卓 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 应用开发实践指南》

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

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

相关文章

AOP理解

AOP就是面向特定的方法进行编程&#xff0c;在不改动原始方法的基础上&#xff0c;可以增强原始方法的功能&#xff0c;或者改变某些功能&#xff0c;我们可以通过AOP记录数据库的操作日志 AOP的底层实现就是动态代理技术&#xff0c;在执行原始方法前&#xff0c;生成一个代理…

南京观海微电子---PCIe协议接口

1. PCIe引脚定义 PCI Express&#xff0c;官方简称PCIe&#xff0c;是计算机总线的一个重要分支, 插槽图片如下&#xff1a; 下表列出在边缘连接器上的PCI Express卡两侧的导线。在印刷电路板&#xff08;PCB&#xff09;的焊接侧为A侧&#xff0c;并且组件侧的B侧。PRSNT1# 和…

Uber/Google Golang编码标准深度分析

良好的代码风格对于开发优秀的产品至关重要&#xff0c;本文通过分析比较三部流传甚广的Golang代码风格指南&#xff0c;介绍了Go代码风格要点&#xff0c;并介绍了通过工具实现代码检查的方式。原文: Mastering Go: In-Depth Analysis of Uber and Google’s Coding Standards…

气相白炭黑外资垄断格局被打破 国内本土企业数量增加

气相白炭黑外资垄断格局被打破 国内本土企业数量增加 气相白炭黑又名气相二氧化硅&#xff0c;是一种无毒、无味、无嗅&#xff0c;无污染的非金属氧化物&#xff0c;主要由硅的卤化物在氢氧火焰中高温水解生成的带有表面羟基和吸附水的无定形的纳米级颗粒。气相白炭黑主要用于…

Unity 关节:铰链、弹簧、固定、物理材质:摩檫力、 特效:拖尾、

组件-物理-关节&#xff1a;铰链&#xff08;类似门轴&#xff09; 自动动作、多少力可以将其断开、 弹簧可以连接另一个刚体&#xff08;拖动即可&#xff09; 固定一般是等待一个断裂力&#xff0c;造成四分五裂的效果。 物理材质 设置摩檫力&#xff0c;则可以创造冰面的…

能量不等式证明

波动方程初值问题能量不等式的证明 Gronwall 不等式 若非负函数 G ( τ ) G(\tau) G(τ) 在 [ 0 , T ] [0,T] [0,T] 上连续可微&#xff0c; G ( 0 ) 0 G(0)0 G(0)0&#xff0c;且对 τ ∈ [ 0 , T ] \tau\in[0,T] τ∈[0,T]满足 d G ( τ ) d τ ≤ C G ( τ ) F ( τ …

27.基于springboot + vue实现的前后端分离-网上租赁交易系统(项目 + 论文)

项目介绍 本课题是根据用户的需要以及网络的优势建立的一个基于Spring Boot的网上租贸系统&#xff0c;来满足用户网络商品租赁的需求。本网上租贸系统应用Java技术&#xff0c;MYSQL数据库存储数据&#xff0c;基于Spring Boot框架开发。在网站的整个开发过程中&#xff0c;首…

XXE-XML实体注入漏洞

目录 1.xml基础 1.1什么是xml 1.2xml文档结构 1.3 什么是DTD 1.4 什么是实体 1.5 什么是外部实体 2.xxe漏洞 2.1xxe漏洞基本介绍 2.2xxe漏洞的危害 经典漏洞案例分析 3.xxe漏洞挖掘和利用 3.1. 识别潜在的XML入口 3.2. 检查XML处理逻辑 3.3. 构造试探Payload 常…

为什么企业CRM系统用不起来?提高使用率的有效策略揭秘

大家好&#xff0c;我是小编卡林&#xff0c;今天为大家带来的是文章是为什么企业CRM系统用不起来&#xff1f;CRM系统使用率低的原因有很多&#xff0c;其中一个共识是假如一款CRM管理系统让员工普遍认为只是领导查询自己工作的系统&#xff0c;那么&#xff0c;这个项目离失败…

LeetCode Python - 40.组合总和②

目录 题目答案运行结果 题目 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 示例 1: 输入…

直流负载原理与应用

直流负载是指能够消耗直流电能的设备或系统&#xff0c;在电力系统中&#xff0c;直流负载主要包括直流电动机、蓄电池、电解槽等。这些设备在运行过程中需要消耗大量的直流电能&#xff0c;因此对直流电源的稳定性和可靠性要求较高。本文将对直流负载的原理及其应用进行简要介…

如何实现class文件的反编译:java-decompiler 反编译工具

java-decompiler 反编译工具 &#x1f600; Java Decompiler 是Java反编译工具&#xff0c;可以对 Java 5 和更高版本的 class 文件进行反编译分析。 &#x1f4dd; 主旨内容 Java Decompiler是一项开源工具&#xff0c;Java Decompiler工具不仅可以实现反编译.class文件&…