OpenGL ES

Android OpenGL ES 开发(七): OpenGL ES 响应触摸事件

像旋转三角形一样,通过预设程序来让对象移动对于吸引注意是很有用的,但是如果你想让你的OpenGL图形有用户交互呢?让你的OpenGL ES应用有触摸交互的关键是,扩展你的GLSurfaceView的实现重载onTouchEvent()方法来监听触摸事件。

本节内容将向你展示如何监听触摸事件来让用户旋转一个图形。

一、设置触摸事件

为了你的OpenGL ES应用能够响应触摸事件,你必须在你的GLSurfaceView中实现onTouchEvent()方法,下面的实现例子展示了怎样监听MotionEvent.ACTION_MOVE事件,并将该事件转换成图形的旋转角度。

private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
private float mPreviousX;
private float mPreviousY;

@Override
public boolean onTouchEvent(MotionEvent e) {
    // MotionEvent reports input details from the touch screen

Android OpenGL ES 开发(六): OpenGL ES 添加运动效果

在屏幕上绘制图形只是OpenGL的相当基础的特点,你也可以用其他的Android图形框架类来实现这些,包括Canvas和Drawable对象。OpenGL ES为在三维空间中移动和变换提供了额外的功能,并提供了创建引人注目的用户体验的独特方式。

在本文中,你将进一步使用OpenGL ES学习怎样为你的图形添加一个旋转动作。

一、旋转一个图形

用OpenGL ES 2.0来旋转一个绘制对象是相对简单的。在你的渲染器中,添加一个新的变换矩阵(旋转矩阵),然后把它与你的投影与相机视图变换矩阵合并到一起:

private float[] mRotationMatrix = new float[16];
public void onDrawFrame(GL10 gl) {
    float[] scratch = new float[16];
    ...
    // Create a rotation transformation for the triangle
    long time = SystemClock.uptimeMillis() % 4000L;

Android OpenGL ES 开发(五): OpenGL ES 使用投影和相机视图

OpenGL ES环境允许你以更接近于你眼睛看到的物理对象的方式来显示你绘制的对象。物理查看的模拟是通过对你所绘制的对象的坐标进行数学变换完成的:

  •  Projection — 这个变换是基于他们所显示的GLSurfaceView的宽和高来调整绘制对象的坐标的。没有这个计算变换,通过OpenGL绘制的形状会在不同显示窗口变形。这个投影变化通常只会在OpenGL view的比例被确定或者在你渲染器的onSurfaceChanged()方法中被计算。想要了解更多的关于投影和坐标映射的相关信息,请看绘制对象的坐标映射。

  •  Camera View — 这个换是基于虚拟的相机的位置来调整绘制对象坐标的。需要着重注意的是,OpenGL ES并没有定义一个真实的相机对象,而是提供一个实用方法,通过变换绘制对象的显示来模拟一个相机。相机视图变换可能只会在你的GLSurfaceView被确定时被计算,或者基于用户操作或你应用程序的功能来动态改变。

本课程描述怎样创建投影和相机视图并将其应用的到你的GLSurfaceView的绘制对象上。

定义投影

Android OpenGL ES 开发(四): OpenGL ES 绘制形状

上文中,我们使用OpenGL定义了能够被绘制出来的形状了,现在我们想绘制出来它们。使用OpenGLES 2.0来绘制形状会比你想象的需要更多的代码。因为OpenGL的API提供了大量的对渲染管线的控制能力。

本文就将讲述如何使用OpenGL ES 2.0 API来绘制出来我们上节定义的形状。

一、初始化形状

在你做任何绘制操作之前,你必须要初始化并加载你准备绘制的形状。除非形状的结构(指原始的坐标)在执行过程中发生改变,你都应该在你的Renderer的方法onSurfaceCreated()中进行内存和效率方面的初始化工作。

public class MyGLRenderer implements GLSurfaceView.Renderer {
    ...
    private Triangle mTriangle;
    private Square   mSquare;
    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
        ...

【下载】从OpenGL ES迁移到Vulkan的原因和方法

本文档概述了OpenGL ES和新Vulkan之间的主要区别,以及为什么开发人员想要从OpenGL ES迁移到Vulkan。

Vulkan是一种新的底层图形API,它允许开发人员通过几乎类似于控制台的API来获得非常低的级别,这使得开发人员能够更好的控制它的性能和透明度。这是通过增加实施复杂度的实现的。

详阅请点击下载《从OpenGL ES迁移到Vulkan的原因和方法》

Android OpenGL ES 开发(三): OpenGL ES 定义形状

上篇文章,我们能够配置好基本的Android OpenGL 使用的环境。但是如果我们不了解OpenGL ES如何定义图像的一些基本知识就使用OpenGL ES进行绘图还是有点棘手的。所以能够在OpenGL ES的View里面定义要绘制的形状是进行高端绘图操作的第一步。

本文主要做的事情就是为了讲解Android设备屏幕相关的OpenGL ES坐标系统,定义形状,形状面的基础知识,以及定义三角形和正方形。

一、定义三角形

OpenGL ES允许你使用三维空间坐标系定义绘制的图像,所以你在绘制一个三角形之前必须要先定义它的坐标。在OpenGL中,这样做的典型方法是为坐标定义浮点数的顶点数组。

为了获得最大的效率,可以将这些坐标写入ByteBuffer,并传递到OpenGL ES图形管道进行处理。

public class Triangle {

    private FloatBuffer vertexBuffer;

    // number of coordinates per vertex in this array

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

为了在Android应用程序中使用OpenGL ES绘制图形,必须要为他们创建一个视图容器。其中最直接或者最常用的方式就是实现一个GLSurfaceView和一个GLSurfaceView.Renderer。GLSurfaceView是用OpenGL绘制图形的视图容器,GLSurfaceView.Renderer控制在该视图内绘制的内容。

下面将讲解如何使用GLSurfaceView 和 GLSurfaceView.Renderer 在一个简单的应用程序的Activity上面做一个最小的实现。

一、在Manifest中声明OpenGL ES使用

为了让你的应用程序能够使用OpenGL ES 2.0的API,你必须添加以下声明到manifest:

<uses-feature android:glEsVersion="0x00020000" android:required="true" />

如果你的应用程序需要使用纹理压缩,你还需要声明你的应用程序需要支持哪种压缩格式,以便他们安装在兼容的设备上。

Android OpenGL ES 开发(一): OpenGL ES 介绍

简介OpenGL ES

谈到OpenGL ES,首先我们应该先去了解一下Android的基本架构,基本架构下图:

Android OpenGL ES 开发(一): OpenGL ES 介绍

在这里我们可以找到Libraries里面有我们目前要接触的库,即OpenGL ES。

根据上图可以知道Android 目前是支持使用开放的图形库的,特别是通过OpenGL ES API来支持高性能的2D和3D图形。OpenGL是一个跨平台的图形API。为3D图形处理硬件指定了一个标准的软件接口。OpenGL ES 是适用于嵌入式设备的OpenGL规范。

Android 支持OpenGL ES API版本的详细状态是:

  •   OpenGL ES 1.0 和 1.1 能够被Android 1.0及以上版本支持
  •   OpenGL ES 2.0 能够被Android 2.2及更高版本支持

梳理 Opengl ES 3.0 (三)顶点坐标变换

先来个宏观上的理解:(其实这块逻辑是个标准流程,而且其他地方介绍的也很多了,这里简单提下。)

坐标转换,其实是不同坐标系之间的变换,一个渲染顶点,要想让它呈现在屏幕上的某个位置,是需要让这个顶点经过一个个坐标系的变换来进行的,每经过一个坐标系,它的坐标就会使用矩阵来执行变化一次,最终变化成为屏幕上的位置。

梳理 Opengl ES 3.0 (三)顶点坐标变换

第一个Object Coordinates,这个比较好理解,就是模型的局部坐标系。这种坐标一般是美术建模的时候就会设定的,当然使用程序代码绘制出来的坐标自然是代码指定的。

比方说,一个坦克,美术在设计时,模型的几何中心点就作为了整个模型的坐标原点,那么炮管上某个顶点的位置就是相对于几何中心的一个偏移,假定为(0,1,1)。

学习OpenGL ES之粒子效果

本文将为大家介绍如何使用Billboards构建一个简单的粒子系统。粒子系统可在做到一些单纯的几何体无法做到的特效,它有很多变种和配置项,譬如制作下雪场景,技能特效,灰尘飞扬的效果等等。本文的例子中只是实现了一个简单的受重力影响的粒子效果,下面是效果图。

学习OpenGL ES之粒子效果

粒子的基本属性

本文中每个粒子就是一个billboard,我创建了新的类Particle来表示粒子,它主要负责粒子的渲染和行为更新。一个完善的粒子系统有很多配置项来控制粒子的属性,这里我列举了粒子的几个基本属性。这里粒子是直接继承Billboard,这样我就可以用最少的三角形来表示一个粒子了,无论你从哪个角度看这个粒子,它始终都面朝摄像机。

@interface Particle: Billboard
@property (assign, nonatomic) float life;
同步内容
--电子创新网--
粤ICP备12070055号