转载请注明出处

本文出自Hansion的博客

本章介绍如何使用GLSurfaceView和GLSurfaceView.Renderer完成在Activity中的最简单实现。

1.在AndroidManifest.xml的manifest节点中声明OpenGL ES的使用

    <!--声明OpenGL ES 2.0版本-->
<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" />

  


纹理压缩相关资料请阅读:https://developer.android.com/guide/topics/graphics/opengl.html#textures

2.构建GLSurfaceView对象

我们一般都会继承GLSurfaceView写一个拓展类,如下:

public class MyGLSurfaceView extends GLSurfaceView {

public MyGLSurfaceView(Context context) {
this(context, null);
}

public MyGLSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public void init() {
// 设置EGLContext客户端使用OpenGL ES 2.0 版本
setEGLContextClientVersion(2);

MyGLRenderer mRenderer = new MyGLRenderer();

// 设置渲染器到GLSurfaceView上
setRenderer(mRenderer);
}
}

  

3.构建Renderer类

Renderer渲染器决定着在GLSurfaceView上绘制什么和如何绘制

我们在以下渲染器中实现了绘制黑屏

public class MyGLRenderer implements GLSurfaceView.Renderer {
@Override
public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {
//指定刷新颜色缓冲区时所用的颜色
//需要注意的是glClearColor只起到Set的作用,并不Clear。
//glClearColor更类似与初始化,如果不做,新的绘制就会绘制在以前的上面,类似于混合,而不是覆盖
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}

@Override
public void onSurfaceChanged(GL10 gl10, int width, int height) {
//glViewport用于告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位、大小
GLES20.glViewport(0, 0, width, height);
}

@Override
public void onDrawFrame(GL10 gl10) {
//glClear表示清除缓冲 传入GL_COLOR_BUFFER_BIT指要清除颜色缓冲
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
}
}

  

4.在Activity中使用我们定义的MyGLSurfaceView

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hansion.learnopengles.MainActivity">

<com.hansion.learnopengles.opengl.MyGLSurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</RelativeLayout>

  

上面的示例代码完成了一个使用OpenGL显示黑屏的简单功能。虽然没有做任何有趣的事情,但通过创建这些类,您已经奠定了开始使用OpenGL绘制图形元素所需的基础。

5.运行效果

参考:

OpenGL ES 2.0官方实例教程

Android OpenGL ES 入门系列(二) --- 环境搭建的更多相关文章

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

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

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

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

  3. Android OpenGL ES 开发(二): OpenGL ES 环境搭建

    零:环境搭建目的 为了在Android应用程序中使用OpenGL ES绘制图形,必须要为他们创建一个视图容器.其中最直接或者最常用的方式就是实现一个GLSurfaceView和一个GLSurfaceV ...

  4. 使用 robotframework 自动化测试系列 二 -----环境搭建

    环境搭建是测试人员基础,本质都是不难的,按照流程和步骤一步步做,遇到问题不要担心,解决的问题越多,你理解的也就越多. 1. 安装python环境,python现在有python2 和python3.由 ...

  5. Python3入门系列之-----环境搭建

    前  言 最近一直在学习Python,想用笔记的方式记录自己踩过的那些坑.俗话说:好记性不如烂笔头. 分享给想学Python的小伙伴.目前本人在学习Python+selenium.接口自动化,有兴趣的 ...

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

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

  7. Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍

    系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...

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

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

  9. 1、 小白带你入坑xamarin系列之环境搭建和准备

    重点提示 由于xamarin发展更新很快 目前教程部分内容已经过时 请注意下载最新版本   2018.05.23 www.xamarin.com 1. 小白带你入坑xamarin系列之环境搭建和准备 ...

随机推荐

  1. 小白的Python之路 day1 变量

    Python之路,Day1 - Python基础1 变量 变量用于存储在计算机程序中引用和操作的信息.它们还提供了一种用描述性名称标记数据的方法,这样我们的程序就能更清晰地被读者和我们自己理解.将变量 ...

  2. C语言写单链表的创建、释放、追加(即总是在最后的位置增加节点)

    昨天周末给学妹讲了一些指针的知识,本来我对指针就是似懂非懂的状态,经过昨天一讲,我对指针的学习就更深刻了 果然给别人讲课也是学习的一个方法.加上最近复习数据结构,发现我的博客里没有链表的博文,所以趁这 ...

  3. VMware---添加esxi主机的实验

     实验环境:window_server_2012_r2_64 SQLServer2012SP1-FullSlipstream-CHS-x64 虚机配置: 关于windows server2012 和 ...

  4. 在centos7中手动编译greenplum

    一.编译环境 Linux version 3.10.0-327.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 2014 ...

  5. Java中string 创建对象时 “”和null的差别

    null和""的差别 问题一: null和""的差别 String s=null; string.trim()就会抛出为空的exception String s ...

  6. LINUX6安装Oracle10g无法启动安装界面解决

    ***********************************************声明*************************************************** ...

  7. 关于chrome浏览器的帐号密码和背景色的填充问题

    不知道大家平时做项目的时候有木有关注这个问题,其实之前做项目遇到过类似的问题,但是因为是单独的chrome浏览器的填充,而且是样式问题稍微严重点,也就没在意.然而在近期的项目中有遇到了这个问题,最为一 ...

  8. JAVA入门[17]-ControllerAdvice处理exception

    1.关于@ControllerAdvice @ControllerAdvice注解本身已经使用了@Component,因此@ControllerAdvice注解所标注的类将会自动被组件扫描获取到,就像 ...

  9. Github开源项目(企业信息化基础平台)

    JEEPlatform 一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化).SCM(供应链系统).ERP(企业资源管理系统).CMS(内容管理系统).CRM(客户关 ...

  10. ViewPager+Fragment 懒加载

    转载于: 作者:尹star链接:http://www.jianshu.com/p/c5d29a0c3f4c來源:简书   ViewPager+Fragment的模式再常见不过了,以国民应用微信为例,假 ...