OpenGL ES
Luckie stone
Android应用开发。
展开
-
GitHub
https://github.com/Android1404/RenderViewToOpenGL原创 2021-09-11 13:27:25 · 235 阅读 · 0 评论 -
VBO与VAO
//初始化顶点坐标与着色数据的方法 public void initVertexData(float[] vertices,float[] normals,float texCoors[]) { //顶点坐标数据的初始化================begin============================ vCount=vertices.length/3; //创建顶点坐标数据缓冲 //vertices...原创 2021-02-28 15:56:53 · 250 阅读 · 1 评论 -
Shader特效:流光效果
使用一个渐变图来引导流光的走向shader_type canvas_item;uniform sampler2D light_vector;uniform float width = 0.08;void fragment(){ vec4 color = texture(TEXTURE,UV); if(color.a != 0.0){ float v = texture...原创 2019-11-02 10:31:21 · 2420 阅读 · 0 评论 -
Android OpenGL ES - 简单实现绿幕抠图
实现绿幕抠图,其实想法很简单。 这里简单粗暴的使用着色器替换。OES Filter直接实现在相机预览上的Shader#extension GL_OES_EGL_image_external : requireprecision mediump float; varying vec2 vTextureCoordinat...原创 2019-11-02 10:28:34 · 1931 阅读 · 0 评论 -
Android OpenGLES2.0(十一)——利用OpenGLES做Camera预览
OpenGLES在Android上除了可以用来做游戏、处理图片也可以用来处理视频图像、做相机预览美颜等等。本篇博客将介绍利用OpenGLES做相机预览的基本实现。预览方案前面我们有介绍过利用OpenGLES显示图片处理图片。视频每一帧其实也是一张图片,Camera预览时,每一帧自然也是一幅图片,我们可以把每张图片按照时间顺序显示出来,就完成了Camera预览的实现。那么问题来了,在前面我...转载 2019-08-18 01:43:38 · 1042 阅读 · 1 评论 -
Android OpenGLES2.0(十)——OpenGL中的平移、旋转、缩放
在前面的博客中,所有的例子都是一个对象,类似绘制圆锥绘制圆柱,我们都是传入一个参数,然后去控制那个圆面的位置,如果我们要绘制几个个正方形,它的位置、大小、方向都是不相同的,按照那种方式该多麻烦啊。所以我们需要更好的办法——矩阵变换。什么是矩阵其实在之前的博客中,我们也基本都用到了矩阵,投影的设置,就是根据参数生成一个4*4的矩阵,我们用长度为16的浮点型数组来存储,相机的设置也是如此。那么矩...转载 2019-08-18 01:43:30 · 2815 阅读 · 1 评论 -
Android OpenGLES2.0(九)——利用OpenGL进行图片处理
在之前的博客中我们就有提过OpenGLES的常见应用范围,其中有一个就是图片的处理。为了保证效率,Android手机中许多美颜相机、图片处理应用,都用到了OpenGLES来处理图片。上一篇博客中,我们利用OpenGLES 显示出了一张图片,并保证图片正常显示,不会被拉伸和压缩。在本篇博客中,我们来了解下利用OpenGLES来处理图片的一些简单方法。相关原理本篇博客以简单的图片色彩处理、模糊和...转载 2019-08-18 01:43:22 · 1311 阅读 · 0 评论 -
Android OpenGLES2.0(八)——纹理贴图之显示图片
什么是纹理贴图一般说来,纹理是表示物体表面的一幅或几幅二维图形,也称纹理贴图(texture)。当把纹理按照特定的方式映射到物体表面上的时候,能使物体看上去更加真实。当前流行的图形系统中,纹理绘制已经成为一种必不可少的渲染方法。在理解纹理映射时,可以将纹理看做应用在物体表面的像素颜色。在真实世界中,纹理表示一个对象的颜色、图案以及触觉特征。纹理只表示对象表面的彩色图案,它不能改变对象的几何形式。...转载 2019-08-18 01:43:13 · 1887 阅读 · 0 评论 -
Android OpenGLES2.0(七)——着色器语言GLSL
关于着色器着色器是用来实现图像渲染的,用来替代固定渲染管线的可编程程序。着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算,由于其可编程性,可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制。这极大的提高了图像的画质。本篇博客重点介绍GLSL语言本身,关于固定管道和可编程管道的介绍可自行查阅,或者直接参照Android OpenGLES2.0(一)——了解OpenGLE...转载 2019-08-18 01:43:01 · 657 阅读 · 0 评论 -
Android OpenGLES2.0(六)——构建圆锥、圆柱和球体
之前的博客中,我们绘制了三角形、正方形、圆形、立方体,今天我们将绘制圆锥、圆柱和球体。能够绘制这些基本的常规几何形体后,其他的常见几何形体的绘制对于我们来说就基本没问题了。绘制圆锥由之前的博客,我们大家也应该都知道了,OpenGL ES2.0中物体的绘制重点就是在于把这个物体表面分解成三角形,分解成功后,绘制自然就不成问题了。圆锥我们很容易就能想到把它拆解成一个圆形和一个锥面,锥面的顶点与圆...转载 2019-08-17 14:39:51 · 388 阅读 · 0 评论 -
Android OpenGLES2.0(五)——绘制立方体
上篇博客中我们提到了OpenGLES中绘制的两种方法,顶点法和索引法。之前我们所使用的都是顶点法,这次绘制立方体使用索引法来绘制立方体。构建立方体上篇博客讲到正方形的绘制,立方体是是由六个正方形组成,我们将这六个正方形绘制出来,立方体就绘制完毕了。既然选择用索引法来绘制,立方体拥有八个顶点,我们先将这八个顶点列出来,放到一个数组中:final float cubePositions[]...转载 2019-08-17 14:32:56 · 371 阅读 · 0 评论 -
Android OpenGLES2.0(四)——正方形和圆形
上篇博客中我们已经使用到了相机和投影,利用变换矩阵,绘制出了等腰直角三角形。在本篇博客中,我们绘制正方形和圆形同样少不了变换矩阵。构建正方形和圆形前面提到过,在OpenGLES的世界里面是没有正方形和圆形的,只有点、线、三角形。三角形就是OpenGLES提供的最复杂的图元单位。所以我们要绘制填充的正方形和圆形就需要利用三角形来实现。正方形正方形的构建比较简单,可以用两个三角形组成。当然...转载 2019-08-17 14:27:27 · 558 阅读 · 0 评论 -
Android OpenGLES2.0(三)——等腰直角三角形和彩色的三角形
上一篇博客中我们已经绘制出了一个直角三角形,虽然我们相对于坐标,我们设置的直角三角形的两腰是相等的,但是实际上展示出来的却并不是这样,虽然通过计算,我们可以把三角形的两腰计算一下比例,使它们在坐标上不等,但是现实出来相等,但是当绘制的图形比较复杂的话,这个工作量对我们来说实在太庞大了。那么我们怎么做呢?答案是,使用变换矩阵,把计算交给OpenGL。矩阵在数学中,矩阵(Matrix)是一个按照...转载 2019-08-17 14:21:57 · 402 阅读 · 0 评论 -
Android OpenGLES2.0(二)——绘制一个三角形
选择绘制三角形作为OpenGL ES 2.0的第一个实例,是因为前文中提到的,点、线、三角形是OpenGL ES世界的图形基础。无论多么复杂的几何物体,在OpenGL ES的世界里都可以用三角形拼成。关于Android OpenGL ES 三角形的绘制,在Android官方文档中有详细的说明和步骤,本文实例也是依照官方文档步骤绘制的三角形。步骤依照官方文档中的说明,Android中利用Ope...转载 2019-08-17 14:15:57 · 579 阅读 · 0 评论 -
Android OpenGLES2.0(一)——了解OpenGLES2.0
什么是OpenGL ES?OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。OpenGL在不同的平台上有不同的实现,但是它定义好了专业的程序接口,不同的平台都是遵照该接口来进行实现的,思想完全相同,方法名也是一致的,所以使用时也基本一致,只需要根...转载 2019-08-17 14:09:13 · 1054 阅读 · 0 评论 -
Android OpenGLES2.0(十二)——FBO离屏渲染
之前的博客我们所做的示例都是直接渲染到屏幕上的,如果我们并不需要渲染到屏幕上,也就是离屏渲染,该怎么做呢?FBO离屏渲染是一个很好的选择。在这篇博客中,我们将以渲染摄像头数据为例,使用FBO进行离屏渲染。关于FBO离屏渲染所谓的FBO就是Frame Buffer Object。之前我们使用OpenGLES渲染,都是直接渲染到屏幕上,FBO可以让我们的渲染不渲染到屏幕上,而是渲染到离屏Buff...转载 2019-08-18 01:43:51 · 568 阅读 · 0 评论 -
Android OpenGLES2.0(十三)——流畅的播放逐帧动画
在当前很多直播应用中,拥有给主播送礼物的功能,当用户点击赠送礼物后,视频界面上会出现比较炫酷的礼物特效。这些特效,有的是用粒子效果做成的,但是更多的时用播放逐帧动画实现的,本篇博客将会讲解在Android下如何利用OpenGLES流畅的播放逐帧动画。在本篇博客中的动画素材,是从花椒直播中“借”出来的(只做学习交流用,应该不构成侵权吧:-D)。逐帧动画的实现方案分析有些朋友看到逐帧动画可能会想...转载 2019-08-18 01:44:02 · 519 阅读 · 0 评论 -
光照
环境光(Ambient Light)漫射光(Diffuse Light)镜面反射光(Specular Light)用材料对光的红、绿、蓝三原色的反射率来近似定义材料的颜色。环境光 模拟从四面八方照射向物体的光,这种光是非发光物体反射的其他光;因此,环境光可以选择一个较暗的颜色值进行模拟。shader代码实现shader 代码实现如下:选择一个较暗的颜色值模拟环境光。...原创 2019-09-07 08:41:20 · 251 阅读 · 0 评论 -
OpenGL ES 3帧率控制
SurfaceView自带帧率控制,每16ms刷新一次。TextureVew帧率控制://帧率控制setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);//设置渲染模式为主动渲染final TimerTask task = new TimerTask() { @Override public void run() { ...原创 2019-09-07 08:39:47 · 2002 阅读 · 0 评论 -
获取具体物体的总变换矩阵
//设置模型矩阵float[] currMatrix = new float[16];Matrix.setRotateM(currMatrix, 0, 0, 1, 0, 0);Matrix.translateM(currMatrix, 0, x, y, z);Matrix.rotateM(currMatrix, 0, angle, x, y, z);Matrix.scaleM(currM...原创 2019-09-07 08:40:36 · 251 阅读 · 0 评论 -
ayout(location=0) in vec4 vPosition
#version 430 core layout(location = 0) in vec4 vPosition; void main(){ gl_Position = vPosition;}第一行#version 430 core 表示我们所使用的4.3版本的OpenGL对应的GLSL语言,core表示使用OpenGL的核心模式。若#version没有设置,则默...原创 2019-08-19 06:27:58 · 3068 阅读 · 2 评论 -
VAO与VBO
1、我们先了解什么是OpenGL对象(OpenGL Object)根据OpenGL Wiki的定义:AnOpenGL Objectis an OpenGL construct that contains some state. When they are bound to the context, the state that they contain is mapped into t...原创 2019-08-19 06:27:48 · 602 阅读 · 0 评论 -
Android硬编码——音频编码、视频编码及音视频混合
视频编解码对许多Android程序员来说都是Android中比较难的一个知识点。在Android 4.1以前,Android并没有提供硬编硬解的API,所以之前基本上都是采用FFMpeg来做视频软件编解码的,现在FFMpeg在Android的编解码上依旧广泛应用。本篇博客主要讲到的是利用Android4.1增加的API MediaCodec和Android 4.3增加的API MediaMuxer...转载 2019-08-19 06:27:39 · 770 阅读 · 0 评论 -
Android利用硬解硬编和OpenGLES来高效的处理MP4视频
遇到的问题说是各种问题,特效方便的不管,我所遇到的视频处理的问题主要为以下两个方面:处理过程耗时较长。因为处理的时候是按照之前的思路,用MediaCodec解码,取出ByteBuffer,然后用OpenGLES处理,处理完毕后readPixels,得到图像数据,然后将图像数据推入MediaCodec编码。 在这里readPixels非常耗时。480*840的视频,一帧耗时基本是40ms+。...转载 2019-08-19 06:27:30 · 528 阅读 · 0 评论 -
Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合
Blend是OpenGL中的一个非常重要的部分,它可以让每个输出的源和目的颜色以多种方式组合在一起,以呈现出不同的效果,满足不同的需求。Blend相关函数及意义在OpenGLES1.0中,Blend在OpenGLES固定的管线中,OpenGLES2.0相对1.0来说,更为灵活。在OpenGLES2.0中,与Blend相关的函数及功能主要有://调用此方法,传入GL_BLEND开启BLE...转载 2019-08-19 06:27:23 · 961 阅读 · 0 评论 -
Android OpenGLES2.0(十七)——球形天空盒VR效果实现
在3D游戏中通常都会用到天空盒,在3D引擎中也一般会存在天空盒组件,让开发者可以直接使用。那么天空盒是什么?天空盒又是如何实现的呢?本篇博客主要介绍如何在Android中利用OpenGLES绘制一个天空盒,并实现VR效果。天空盒、天空穹、天空球和VR虽然大多数人知道这些东西是啥,但是我觉得我还是有必要把他们的定义“搬”过来,万一有人不知道呢。天空盒(Sky Box)是放到场景中的一个立方...转载 2019-08-18 02:04:08 · 630 阅读 · 0 评论 -
Android OpenGLES2.0(十六)——3D模型贴图及光照处理(obj+mtl)
在Android OpenGLES2.0(十四)——Obj格式3D模型加载中实现了Obj格式的3D模型的加载,加载的是一个没有贴图,没有光照处理的帽子,为了呈现出立体效果,“手动”加了光照,拥有贴图的纹理及光照又该怎么加载呢?模型文件本篇博客例子中加载的是一个卡通形象皮卡丘,资源是在网上随便找的一个。加载出来如图所示:obj内容格式如下:# Wavefront OBJ file...转载 2019-08-18 01:44:18 · 1381 阅读 · 0 评论 -
Android OpenGLES2.0(十五)——利用EGL后台处理图像
在Android OpenGLES2.0(十二)——FBO离屏渲染中,记录了采用FBO进行离屏渲染的方式来进行后台处理图像,但是在使用时,示例中还是用到了GLSurfaceView控件来提供GL环境。怎样完全抛开GLSurfaceView来进行图像处理呢?OpenGLES和EGLOpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业...转载 2019-08-18 01:44:10 · 925 阅读 · 0 评论 -
Android OpenGLES2.0(十四)——Obj格式3D模型加载
加载出来如图所示:格式如下:# File exported by ZBrush version 4.2# www.zbrush.com#Vertex Count 4898#Face Count 4848#Auto scale x=0.211538 y=0.211538 z=0.211538#Auto offset x=-0.000000 y=-0.412507 z=-0.000...转载 2019-08-17 13:14:47 · 1411 阅读 · 1 评论 -
OpenGL学习之Matrix.frustumM和Matrix.setLookAtM解析
Android使用OpenGL ES2.0绘制3D图像或者加载3D模型时,为了达到立体效果往往需要设置视见转换矩阵和投影转换矩阵即Matrix.setLookAtM(mVMatrix, 0, cx, cy, cz, tx, ty, tz, upx, upy, upz) 和 Matrix.frustumM(mProjMatrix, 0, left, right, bottom, top, nea...原创 2019-08-17 11:20:55 · 2617 阅读 · 0 评论 -
Android OpenGL ES (三)基本框架
一.视图组件 GLSurfaceViewAndroid上用于显示OpenGL视图,一般是使用GLSurfaceView,一个继承自SurfaceView的组件。它的渲染绘制在一个单独的线程中,而非主线程。GLSurfaceView一般是结合一个GLSurfaceView的内部接口类Renderer来使用。Renderer类负责渲染图形图像,而GLSurfaceView负责触摸事件等逻辑的处...转载 2019-08-08 21:03:23 · 645 阅读 · 0 评论 -
Android OpenGL ES (二)基础概念
基本图形从上面的渲染流程我们可以知道,GL中是先绘制好图形的轮廓,再将颜色、图案绘制到这个轮廓上的,所以,能画什么样的图形至关重要。OpenGL ES中,只提供了3种基本图形:点、线、三角形。而其他我们熟知的图形,都是基于这3种基本图形处理拼接合成的。2.0版本渲染流程OpenGL展示到屏幕上的流程整体上,我将7个流程步骤拆解成了3大部分:确定顶点的位置,通过这些顶点绘制出指定的...转载 2019-08-08 20:59:41 · 319 阅读 · 0 评论 -
Android OpenGL ES (一)简介
OpenGL是什么OpenGL是一个跨平台的软件接口语言,用于调用硬件的2D、3D图形处理器。由于是只软件接口,所以具体底层实现依赖硬件设备制造商。Android includes support for high performance 2D and 3D graphics with the Open Graphics Library (OpenGL®), specifical...转载 2019-08-08 20:58:15 · 396 阅读 · 0 评论 -
Android openGl开发详解(二)——通过SurfaceView,TextureView,GlSurfaceView显示相机预览(附Demo)
1. SurfaceView,GlSurfaceView,SurfaceTexture,TextureView的优缺点及区别SurfaceView继承自View,拥有View的大部分属性,但是由于holder的存在,不能设置透明度。优点:可以在一个独立的线程中进行绘制,不会影响主线程,使用双缓冲机制,播放视频时画面更流畅缺点:surface的显示不受View属性的控制,不能将其放在Vi...转载 2019-06-09 09:23:35 · 1489 阅读 · 0 评论 -
Android openGl开发详解(一)——绘制简单图形
1. What? openGl是什么?openGl ES又是什么?相信很多人从事开发的都或多或少听到过有关OpenGl这个东西,但是平时用的少,只知道有这么个东西,而且学起来不简单,所以大多数人都不能讲出个个所以然来。官方对OpenGl的描述为:OpenGL(Open Graphics Library开发图形接口)是一个跨平台的图形API,用于指定3D图形处理硬件中的标准软件接口。O...转载 2019-06-09 09:23:27 · 5186 阅读 · 0 评论 -
Android OpenGL添加纹理
上一篇文章【Android OpenGL添加光照和材料属性 】我们已经学了如何为3D模型添加光照和材料属性,使得模型看起来更有立体感。今天我们学习如何为3D模型贴上纹理,使得模型看起来更真实!目前我在网上没有找到带有纹理图片的STL模型文件,如果随便贴一张图片上去的话并不好看,看起来不会很真实。好在手头上现在有2个带有纹理的STL格式文件,虽然这两个模型看起来有点残缺,但是不影响我们学习如何贴纹理...转载 2018-08-09 06:30:00 · 980 阅读 · 1 评论 -
Android OpenGL添加光照和材料属性
在上一篇文章【 Android OpenGL显示任意3D模型文件 】中,我们学习了如何读取并显示STL格式的3D文件,但是,最后,看到的并没有添加光照效果,导致虽然模型在旋转,但是我们看到的画面却像一个平面。今天我们开始学习如何给模型添加灯照效果,以及如何为模型添加材料属性,使得最终看到的旋转模型真正为3D效果。首先,看看最终效果,如下图所示:1 光照效果因为我们所做的立体效果是根...转载 2018-08-09 06:29:49 · 479 阅读 · 0 评论 -
Android OpenGL显示任意3D模型文件
虽然标题是说显示任意3D文件,但是本文主要是以STL格式文件为例。其他的格式本质上都是一样的,只是解析部分的代码不同而已。接下来我们开始学习~1 STL文件它是标准的3D文件格式,一般3D打印机都是支持打印STL文件,关于STL文件的格式、以及相关介绍请参考百度百科:【stl格式】。当然了,我在代码的注释中也会进行相关解释。1.1 解析准备首先,在解析STL文件格式之前,我们需要进...转载 2018-08-09 06:29:42 · 8430 阅读 · 2 评论 -
Android OpenGL 显示基本图形及相关概念解读
在上一篇文章中,我们知道了如何在Android开发一个OpenGL模型显示。但是并没有对具体模型数据进行显示,只是展示一个背景颜色而已,在本章中,我们学习如何将一个模型数据显示成一个具体的3D图形。在Android中开发OpenGL程序非常简单,但是却有很多OpenGL相关概念是必须要清楚的,了解这些相关概念才能写出正确的代码,否则,你写出来的程序可能会无缘无故崩溃,或者是画出来的模型显示不出来等...转载 2018-08-09 06:29:31 · 1429 阅读 · 0 评论 -
Android OpenGL入门
如今VR这么火,感觉有必要先把OpenGL学好,为以后转VR奠定一些基础。一年前,接触过Android的OpenGL,当时是实现了在Android上显示标准的3D文件(STL格式)。现在打算整理一下OpenGL相关知识,后续会有相关的系列文章。本文为后面文章铺垫,让大家对OpenGL代码编写有个总体上的认识。1 检测设备是否支持OpenGLAndroid中,有个专门用于显示OpenGL的3...转载 2018-08-09 06:29:22 · 436 阅读 · 0 评论