Android OpenGL ES2.0基础(一、最简单的使用)

2024-04-07 07:32

本文主要是介绍Android OpenGL ES2.0基础(一、最简单的使用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、OpenGL ES是什么

OpenGL(Open Graphics Library)是一个跨编程语言、跨平台的3D图形库。广泛应用于游戏、娱乐、VR等领域.安卓系统中的核心库层就有这个。OpenGL ES是在OpenGL基础上针对移动端而裁剪的 。OpenGL ES由当初的1.0、2.0发展到现在的3.0了。我这个系列是针对2.0的.因为3.0的只支持android 4.3以上的版本,即时是4.3以上,有的手机硬件也还不支持3.0 。

二、开发要点

对于OpenGL最简单的开发只需用两个类即可,GLSurfaceView和GLSurfaceView.Renderer。
  1. GLSurfaceView可以直接new,也可以放到布局里。
  2. 一个GLSurfaceView要配套一个Renderer,这个Renderer是一个接口,里面有三个函数。这点跟Surfaceiew很像。尤其是其中的onDrawFrame()可以类比为Android里View的onDraw()函数。
interface GLSurfaceView.Renderer {
//在Surface创建的时候调用,可以在这里进行一些初始化操作
public void onSurfaceCreated(GL10 gl, EGLConfig config);
//在Surface改变的的时候调用
public void onSurfaceChanged(GL10 gl, int width, int height);
//在Surface上绘制的时候调用
public void onDrawFrame(GL10 gl);
}
  1. 记得在Manifests文件中添加
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
<supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />

三、着(kai)手(shi)开(ru)发(keng)

  1. 新建一个Android项目
  2. 新建GLSurfaceView实例
  3. 创建渲染器Renderer实例
  4. 给GLSurfaceView设置Renderer实例
  5. 显示GLSurfaceView

MyGLSurfaceView继承自GLSurfaceView

import android.content.Context;
import android.opengl.GLSurfaceView;
import android.view.MotionEvent;
/*** Created by Administrator on 2017/3/8.* description :*/
public class MySurfaceView extends GLSurfaceView {MyRenderer mRenderer;public MySurfaceView(Context context) {super(context);init();}private void init(){// 创建一个OpenGL ES 2.0 contextsetEGLContextClientVersion(2);//创建渲染器实例mRenderer = new MyRenderer();// 设置渲染器setRenderer(mRenderer);//设置渲染模式setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);}
}

Render的渲染模式有两种

  1. GLSurfaceView.RENDERMODE_CONTINUOUSLY
    不间断的绘制,默认渲染模式是这种
  2. GLSurfaceView.RENDERMODE_WHEN_DIRTY
    不会主动绘制,也就是当调用GLSurfaceView的requestRender()方法后才会执行一次(第一次运行的时候会自动绘制一次)

MyRender继承自GLSurfaceView.Renderer,一些初始化和一些逻辑都在这里进行

public class MyRenderer implements GLSurfaceView.Renderer {// Surface创建的时候调用@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {// 设置清屏颜色GLES20.glClearColor(0f, 1f, 0f, 0f);}// Surface改变的的时候调用@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {// 设置窗口大小GLES20.glViewport(0, 0, width, height);}// 在Surface上绘制的时候调用@Overridepublic void onDrawFrame(GL10 gl) {//调用glClear(GL10.GL_COLOR_BUFFER_BIT)方法清除屏幕颜色,执行这个方法之后//屏幕就会渲染之前通过glClearColor设置的清屏颜色.GLES20.glClear(GL10.GL_COLOR_BUFFER_BIT);}}

在MainActivity中使用

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;/*** Created by Administrator on 2017/3/8.* description :*/
public class MainActivity extends AppCompatActivity {MySurfaceView mySurfaceView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mySurfaceView = new MySurfaceView(this);setContentView(mySurfaceView);}@Overrideprotected void onPause() {super.onPause();mySurfaceView.onPause();}@Overrideprotected void onResume() {super.onResume();mySurfaceView.onResume();}
}

运行效果

这里写图片描述

这篇关于Android OpenGL ES2.0基础(一、最简单的使用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881993

相关文章

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl