
OpenGL ES for Android
老孟Flutter
出版《Flutter 实战入门》一书,专注分享Flutter原理及实践应用,个人博客地址:http://laomengit.com
展开
-
OpenGL ES for Android 相机预览适配不同分辨率的手机
上一篇讲到相机预览,相机的预览分辨率设置为1280*720,大家有没有想过如果将GLSurfaceView设置为正方形会如何?很明显画面会被拉伸导致变形,在想一下如果设置GLSurfaceView为全屏,但目前市场上的手机有很多种不同的分辨率,尤其是全面屏、折叠屏屏,这些手机并不是常见的16:9的手机,因此我们需要适配这些不同分辨率的手机。有的同学可能可能会想根据不同分辨率的手机而设置不同...原创 2020-02-18 22:10:00 · 1869 阅读 · 1 评论 -
OpenGL ES for Android 相机预览
权限Android上打开摄像头需要camera权限,在Android 6.0及以上的版本需要动态申请权限,在AndroidManifest.xml中添加camera权限:<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.arvr.sample"> &...原创 2020-02-17 21:57:37 · 1467 阅读 · 1 评论 -
OpenGL ES for Android 视频缩放、旋转、平移
在上一篇文章中我们介绍了如何使用OpenGL ES预览视频,在文章的末尾提到如果渲染视频的窗口宽高比和视频宽高比不一致会导致视频拉伸,这篇文章将会介绍如何通过视频的缩放来解决这个问题。我们希望当视频的比例和窗口的比例不一样时,其中一边占满全屏,另一边等比缩放并居中,其余部分显示黑色,这个效果和我们平时使用的视频播放器的效果是一样的,效果如图:我们在OpenGL ES for Android...原创 2020-02-11 18:18:13 · 4357 阅读 · 2 评论 -
OpenGL ES for Android 播放视频
为什么要使用OpenGL ES播放视频我们都知道Android中有VideoView控件可以直接播放视频,既简单又实用,那么为什么我们还要用OpenGL ES来播放视频呢?那是因为使用OpenGL ES可以做更多的酷炫的动效,比如旋转视频、双指缩放视频、视频的截图、视频的录制、直播、换脸,还有类似“激萌”App里面的特效等这些都是VideoView所无法实现的,而通过OpenGL ES则可以实...原创 2020-02-05 17:57:52 · 4653 阅读 · 3 评论 -
OpenGL ES for Android 绘制旋转的地球
No 图 No Code,我们先来欣赏下旋转的地球:是不是很酷炫,要想绘制出上面酷炫的效果需要3个步骤:计算球体顶点数据地球纹理贴图通过MVP矩阵旋转地球计算球体顶点数据我们知道OpenGL中最基本的图元是三角形,任何复杂的图形都可以分解为一个个的三角形,球体也不例外,假设球体上有“经纬度”,通过“经纬度”将球体分割为一个个的四边形,如下图:在把这些四边形分割为2个三角形,所...原创 2020-02-03 16:10:02 · 6790 阅读 · 4 评论 -
OpenGL ES for Android 深度测试
什么是深度深度就像是现实世界中物体与我们自己之间的距离,而在OpenGL中,深度是像素点(可以理解为现实世界中的物体)距离相机的距离,深度信息保存在深度缓存中,深度值越大则离相机越远。深度测试有什么作用在OpenGL ES中默认是不开启深度测试的,不使用深度测试的时候,先绘制较近的物体,然后绘制较远的物体,当远处的物体和近处的物体出现重叠时导致近处的物体被远处的物体遮挡,这不符合实际的现象...原创 2020-02-02 10:58:31 · 1272 阅读 · 0 评论 -
OpenGL ES for Android 绘制立方体
立方体有6个面,8个顶点,因此绘制立方体其实就是绘制6个面。顶点shaderattribute vec4 a_Position;attribute vec4 a_color;varying vec4 v_color;void main(){ v_color = a_color; gl_Position = a_Position;}a_Position为顶点数据,...原创 2020-02-02 10:57:55 · 1631 阅读 · 0 评论 -
OpenGL ES for Android 绘制矩形和正方形
前面的文章介绍了如何绘制三角形,在OpenGL ES中没有直接绘制矩形的方式,通过绘制2个三角形的方式绘制矩形。绘制矩形的顶点shader:attribute vec4 vPosition;void main() { gl_Position = vPosition;}绘制矩形的片段shader:precision mediump float;void main(){...原创 2020-01-29 15:15:28 · 2146 阅读 · 0 评论 -
OpenGL ES for Android 绘制三角形
在Android中绘制三角形的顶点shader如下:attribute vec4 vPosition;void main() { gl_Position = vPosition;}vPosition是顶点,由应用程序传入。片段shader代码如下:precision mediump float;void main(){ gl_FragColor = vec4(1,0...原创 2020-01-29 10:57:30 · 1188 阅读 · 0 评论 -
OpenGL ES 变量、结构体、语句、函数、精度
变量void表示空,用于无返回值的函数。比如顶点shader中main函数:void main() { gl_Position = vPosition;}float、int、bool分别代表浮点型,整型,布尔型。定义各类型变量如下:float f = 1.0;int i =0;bool b = true;vec2、vec3、vec4分别包含2、3、4个float...原创 2020-01-29 10:53:19 · 2571 阅读 · 0 评论 -
OpenGL ES for Android 绘制线
在Android中绘制一条直线的顶点shader如下:attribute vec4 vPosition;void main() { gl_Position = vPosition;}vPosition是顶点,由应用程序传入。片段shader代码如下:precision mediump float;uniform vec4 u_color;void main(){ ...原创 2020-01-27 14:32:18 · 4359 阅读 · 2 评论 -
OpenGL ES 纹理过滤模式-glTexParameteri
Android中GLES20.glTexParameteri函数表示对纹理的设置,函数结构如下:public static native void glTexParameteri( int target, int pname, int param );参数说明如下: target: 活动纹理单元的目标纹理,GLES20...原创 2020-01-25 07:46:40 · 2362 阅读 · 0 评论 -
OpenGL ES for Android 绘制一个点
在Android中开发OpenGL ES的应用程序是无法调试 shader代码的,因此绘制点是一个很好的调试方法,为了定位问题经常会将一些结果输出的屏幕上,比如人脸识别关键点项目,想要确定人脸关键点是否正确,将关键点绘制在人脸对应位置上可以很好的展示人脸关键点正确与否。下面将会完成绘制一个点,点的颜色由应用程序确定,顶点shader代码如下:attribute vec4...原创 2020-01-26 07:29:28 · 1372 阅读 · 0 评论 -
OpenGL ES 绘制纹理
在OpenGL ES中绘制一张图片需要使用到纹理(texture),绘制纹理步骤如下:编写shader绘制纹理的shader需要顶点数据、纹理顶点数据和纹理。Vertex Shader代码如下:attribute vec4 a_Position;attribute vec2 a_TexCoordinate;varying vec2 v_TexCoord;void...原创 2020-01-24 07:09:11 · 2563 阅读 · 0 评论 -
OpenGL ES 之attribute
春节倒计时02天注意:无特殊说明,文中的GLSL均指OpenGL ES 2.0版本。attribute是GLSL中特殊的变量类型,用于从“外部”到顶点着色器的通信,只能用于Vertex Shader(顶点着色器),不能用于其他Shader中,attribute 通常用来存储位置坐标、法向量、纹理坐标和颜色等,定义如下:attribute vec4 vPosition...原创 2020-01-22 06:54:24 · 1927 阅读 · 0 评论 -
OpenGL ES 之uniform和varying
老孟一个有态度的程序员uniformuniform是GLSL中变量类型的限定符,使用uniform限定的变量是只读值,在Shader中无法更改,只能通过应用程序传递给uniform。uniform变量为全局共享变量,可以在所有的Shader中可以获取,uniform定义如下:uniform float uTexPos;uniform 变量通常是存储在G...原创 2020-01-23 07:04:39 · 1900 阅读 · 0 评论 -
OpenGL ES for Android 环境搭建
在Android上运行OpenGL ES程序需要用到GLSurfaceView控件,GLSurfaceView继承自SurfaceView并实现了GLThread,通过OpenGL ES进行绘制。OpenGL ES1.0是基于OpenGL 1.3的,OpenGL ES1.1是基于OpenGL 1.5的。Android1.0和更高的版本支持这个API规范。OpenGL ES 1.x是针对固...原创 2020-01-19 22:52:54 · 2250 阅读 · 0 评论 -
OpenGL ES for Android 总览
经过半年的准备OpenGL ES for Android系列文章终于要和大家见面了,在这里定一个小目标-先吸引1000个粉丝,万一实现了呢。写关于OpenGL ES的文章开始是有一些犹豫的,因为OpenGL ES的一些概念非常晦涩难懂,很多需要懂得计算机图形算法学相关的知识,您可能学了很久都找不到门道,知其然不知其所以然是常有的事。本系列的文章并不会深入的研究计算机图形算法相关的知识,而是从工...原创 2020-01-18 15:36:24 · 5361 阅读 · 3 评论