1.OpenGL 和OpenGL ES

  OpenGL(Open Graphics Library)是一种用于渲染2D和3D图形的跨平台编程接口。OpenGL提供了一套标准的函数和接口,使开发人员能够在各种操作系统上创建高性能的图形应用程序,这些操作系统包括Windows、Linux、macOS和一些嵌入式系统。OpenGL ES(OpenGL for Embedded Systems)是OpenGL的嵌入式系统版本,专门设计用于移动设备、嵌入式系统和其他资源受限的环境。与标准的OpenGL相比,OpenGL ES经过精简和优化,以适应移动设备和嵌入式系统的硬件和性能要求。

  它的应用场景如下:

  1. 游戏开发:移动游戏通常需要高性能的图形渲染,以呈现复杂的场景、光影效果和3D模型。OpenGL ES是移动游戏开发的主要工具之一,许多流行的移动游戏都使用它来实现图形渲染。
  2. 图形用户界面GUI:移动应用程序的用户界面通常包含复杂的图形元素,如按钮、滑块、图标等。OpenGL ES可用于创建流畅、响应迅速的用户界面,同时提供各种视觉效果。
  3. 地图和导航应用:在需要呈现复杂地图、导航路径和地理信息的应用中,OpenGL ES可以用于实现高性能的地图渲染。
  4. 娱乐和多媒体应用:通过OpenGL ES,开发者可以创建高质量的娱乐和多媒体应用,包括图像和视频编辑应用,艺术创作工具等。

2.第一个OpenGL ES应用程序

  这个应用程序的功能非常简单,它要做的是初始化OpenGL并不停地清空屏幕。初始化OpenGL使用的类是GLSurfaceView,它可以处理OpenGL初始化过程中比较基本的操作,如配置显示设备,在后台线程中渲染,渲染是在显示设备中一个称为surface的特定区域完成的。在使用GLSurfaceView的时候,我们要处理好Activity生命周期事件,在Activity暂停的时候要释放资源,在Activity恢复的时候要重新恢复资源。

  完整的代码如下:

package com.example.opengles20

import android.app.ActivityManager
import android.content.Context
import android.opengl.GLSurfaceView
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast class MainActivity : AppCompatActivity() {
private lateinit var glSurfaceView: GLSurfaceView
var rendererSet=false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
glSurfaceView= GLSurfaceView(this)
     //检查设备是否支持OpenGL ES 2.0
val activityManager=getSystemService(Context.ACTIVITY_SERVICE) as? ActivityManager
val configurationInfo=activityManager?.deviceConfigurationInfo
val support:Boolean= configurationInfo?.reqGlEsVersion!! >= 0x20000
if(support){//配置渲染表面
glSurfaceView.setEGLContextClientVersion(2)
glSurfaceView.setRenderer(MyRenderer())
rendererSet=true
}
else{
Toast.makeText(this,"这台设备不支持OpenGL ES 2.0",Toast.LENGTH_SHORT).show()
return
}
setContentView(glSurfaceView)
} override fun onPause() {
super.onPause()
if(rendererSet){
glSurfaceView.onPause()
}
} override fun onResume() {
super.onResume()
if(rendererSet){
glSurfaceView.onResume()
}
}
}
package com.example.opengles20

import android.opengl.GLES20.*
import android.opengl.GLSurfaceView.Renderer
import javax.microedition.khronos.egl.EGLConfig
import javax.microedition.khronos.opengles.GL10 class MyRenderer:Renderer {
override fun onSurfaceCreated(p0: GL10?, p1: EGLConfig?) {
glClearColor(0.0F,1.0F,0.0F,0.0F)//设置清除所使用的颜色,参数分别代表红绿蓝和透明度
} override fun onSurfaceChanged(p0: GL10?, width: Int, height: Int) {
glViewport(0,0,width,height)
     //是一个用于设置视口的函数,视口定义了在屏幕上渲染图形的区域。这个函数通常用于在渲染过程中指定绘图区域的大小和位置
     //前两个参数x,y表示视口左下角在屏幕的位置

} override fun onDrawFrame(p0: GL10?) {
glClear(GL_COLOR_BUFFER_BIT)//清除帧缓冲区内容,和glClearColor一起使用
}
}

  Renderer是一个接口,代表渲染器,图像的绘制就是由它控制的,它里面有三个方法需要实现:

  1. onSurfaceCreated:当surface被创建的时候,GLSurfaceView会调用这个方法,这发生在应用程序第一次运行的时候,并且当设备被唤醒或者用户从其他Activity返回的时候也可能被调用,也就是说该方法可能被多次调用
  2. onsurfaceChanged:每次surface尺寸发生变化的时候,这个方法会被GLSurfaceView调用,横竖屏切换的时候尺寸会发生变化
  3. onDrawFrame:当绘制一帧时,这个方法会被GLSurfaceView调用,在这个方法中,我们一定要绘制一些东西,因为这个方法返回时,渲染缓冲区会被交换并显示在屏幕上,如果什么都没有画,会看到糟糕的闪烁效果

Android OpenGL ES入门的更多相关文章

  1. Android OpenGL ES 入门系列(二) --- 环境搭建

    转载请注明出处 本文出自Hansion的博客 本章介绍如何使用GLSurfaceView和GLSurfaceView.Renderer完成在Activity中的最简单实现. 1.在AndroidMan ...

  2. Android OpenGL ES 入门系列(一) --- 了解OpenGL ES的前世今生

    转载请注明出处 本文出自Hansion的博客 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机.PDA和游戏主机等嵌 ...

  3. Android OpenGL ES 开发教程 从入门到精通

    感谢,摘自:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ...

  4. [工作记录] Android OpenGL ES: non-square texture - continue

    previous: [工作记录] Android OpenGL ES 2.0: square texture not supported on some device recently I found ...

  5. Android OpenGL ES(十三)通用的矩阵变换指令 .

    Android OpenGL ES 对于不同坐标系下坐标变换,大都使用矩阵运算的方法来定义和实现的.这里介绍对应指定的坐标系(比如viewmodel, projection或是viewport) An ...

  6. Android OpenGL ES(十二):三维坐标系及坐标变换初步 .

    OpenGL ES图形库最终的结果是在二维平面上显示3D物体(常称作模型Model)这是因为目前的打部分显示器还只能显示二维图形.但我们在构造3D模型时必须要有空间现象能力,所有对模型的描述还是使用三 ...

  7. Android OpenGL ES(八)绘制点Point ..

    上一篇介绍了OpenGL ES能够绘制的几种基本几何图形:点,线,三角形.将分别介绍这几种基本几何图形的例子.为方便起见,暂时在同一平面上绘制这些几何图形,在后面介绍完OpenGL ES的坐标系统和坐 ...

  8. Android OpenGL ES .介绍

    引自:http://blog.csdn.net/hgl868/article/details/6971624 1.    OpenGL ES 简介 Android 3D引擎采用的是OpenGL ES. ...

  9. Android OpenGL ES(七)基本几何图形定义 .

    在前面Android OpenGL ES(六):创建实例应用OpenGLDemos程序框架 我们创建了示例程序的基本框架,并提供了一个“Hello World”示例,将屏幕显示为红色. 本例介绍Ope ...

  10. Android OpenGL ES(六)创建实例应用OpenGLDemos程序框架 .

    有了前面关于Android OpenGL ES的介绍,可以开始创建示例程序OpenGLDemos. 使用Eclipse 创建一个Android项目 Project Name: OpenGLDemos ...

随机推荐

  1. Dokcer学习之旅(1)——运行一个简单的容器

    基本概念 镜像 我们都知道,操作系统分为 内核 和 用户空间.对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持.而 Docker 镜像(Image),就相当于是一个 ...

  2. 5、Spring之bean的作用域和生命周期

    5.1.bean的作用域 5.1.1.单例(默认且常用) 5.1.1.1.配置bean 注意:当bean不配置scope属性时,默认是singleton(单例) <?xml version=&q ...

  3. Python从0到1丨详解图像锐化的Sobel、Laplacian算子

    本文分享自华为云社区<[Python从零到壹] 五十八.图像增强及运算篇之图像锐化Sobel.Laplacian算子实现边缘检测>,作者: eastmount . 一.Sobel算子 So ...

  4. 开源.NetCore通用工具库Xmtool使用连载 - 图形验证码篇

    [Github源码] <上一篇> 介绍了Xmtool工具库中的Web操作类库,今天我们继续为大家介绍其中的图形验证码类库. 图形验证码是为了抵御恶意攻击出现的一种设计:例如用户登录.修改密 ...

  5. 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)

    在我们的SqlSugar的开发框架中,整合了Winform端.Vue3+ElementPlus的前端.以及基于UniApp+Vue+ThorUI的移动前端几个前端处理,基本上覆盖了我们日常的应用模式了 ...

  6. LVS DR模式负载均衡群集部署

    LVS DR模式负载均衡群集部署 1 LVS-DR 模式的特点 直接路由直接路由 调节器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调节器(与NAT模式的区别)节点服务器 ...

  7. 基于间隔密度的概念漂移检测算法mdm-DDM

    概念漂移 ​ 概念漂移是数据流挖掘领域中一个重要的研究点.传统的机器学习算法在操作时通常假设数据是静态的,其数据分布不会随着时间发生变化.然而对于真实的数据流来说,由于数据流天生的时间性,到达的数据的 ...

  8. 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(6) -- 窗口控件脏数据状态IsDirty的跟踪处理

    在我们窗口新增.编辑状态下的时候,我们往往会根据是否修改过的痕迹-也就是脏数据状态进行跟踪,如果用户发生了数据修改,我们在用户退出窗口的时候,提供用户是否丢弃修改还是继续编辑,这样在一些重要录入时的时 ...

  9. 将Python程序打包成Linux可执行文件

    将Python程序打包成Linux可执行文件 安装环境 首先我们要安装pip,命令如下: sudo apt install python3-pip 使用的工具是pyinstaller,打开终端输入su ...

  10. 聊聊基于Alink库的主成分分析(PCA)

    概述 主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术,用于将高维数据转换为低维的特征空间.其目标是通过线性变换将原始特征转化为一组新的 ...