最近在学习Android OpenGL ES,但是一直没有找到合适的学习资料,偶然看到一个GL的demo,发现这个demo的每个版块都有相应的教程(非常详细),所以现在跟着这个demo一起走下去,一边学习一边记录.

demo地址
demo详细教程

各种详情介绍的博客

混合功能(glBlendFunc)
混合公式

注意事项:

  • 对于GL的操作,要在一个线程里面,这个线程被称为GL线程

GLSurfaceView OpenGL显示的view

setRenderer()                        //设置画笔(也就是渲染者)
setRenderMode()             //设置渲染的模式
requestRender()                 //告诉它的画笔(GLSurfaceView.Renderer),要重新画画(渲染)
setDebugFlags(int)
setEGLConfigChooser(boolean)
setEGLConfigChooser(EGLConfigChooser)
setEGLConfigChooser(int, int, int, int, int, int)
setGLWrapper(GLWrapper)
setEGLContextClientVersion(2);      // 设置OpenGl ES的版本为2.0

GLSurfaceView.Renderer 渲染器

onSurfaceCreated()               //Surface创建的时候被调用
onSurfaceChanged()              //Surface大小改变
onDrawFrame()                       //绘制的时候

GLES20 版本2.0

详细介绍 https://blog.csdn.net/matrix_laboratory/article/details/50897183

glClearColor                             //设置清屏的颜色,参数分别对应RGBA
glClear(*)                                  //GL清理
glCreateShader()                        //创造[顶点着色器]、[片元(像素)着色器]
glShaderSource()                    //加载着色器源代码
glCompileShader()                   //编译着色器
glGetShaderiv()                     //获取着色器的编译情况
glCreateProgram()                   //创建着色器程序
glAttachShader()                        //向程序中加入[顶点着色器][片元着色器]
glLinkProgram()                     //链接程序
glGetProgramiv()                    //获取program的链接情况
glGetAttribLocation()               //获取程序中 [顶点位置] [顶点颜色] 属性引用
glGetUniformLocation()              //获取程序中 [总变换矩阵] [位置、旋转变换矩阵] [光源位置] [摄像机位置] 引用
glUseProgram()                      //制定使用某套着色器程序
glUniformMatrix4fv()                //将 [总变换矩阵] [位置、旋转变换矩阵] 传入着色器程序
glUniform3fv()                      //将 [光源位置] [摄像机位置] 传入着色器程序
glUniform1i()                       //给uniform属性赋值
glVertexAttribPointer()             //将 [顶点位置数据] [顶点法向量数据] 传入渲染管线
glEnableVertexAttribArray()         //启用 [顶点位置数据] [法向量数据]
glDrawArrays()                      //绘制被加载的物体
glGenTextures()                     //生成纹理名
glBindTexture()                     //绑定到目标纹理
glTexParameterf()                   //设置纹理参数
glActiveTexture()                   //激活纹理单元

ETC1Util

loadTexture()                //加载纹理

GLUtils

texImage2D()             //从bitmap里面加载2D纹理

GLSL  着色器语言

Shader源代码讲解 https://blog.csdn.net/grafx/article/details/35561487
Shader网站 https://www.shadertoy.com/
Shader网站 https://www.shadertoy.com/results?sort=newest

'基本类型'
float  bool  int    基本数据类型
vec2                //包含了2个浮点数的向量
vec3                //包含了3个浮点数的向量
vec4                //包含了4个浮点数的向量
ivec2               //包含了2个整数的向量
ivec3               //包含了3个整数的向量
ivec4               //包含了4个整数的向量
bvec2               //包含了2个布尔数的向量
bvec3               //包含了3个布尔数的向量
bvec4               //包含了4个布尔数的向量
mat2                //2*2维矩阵
mat3                //3*3维矩阵
mat4                //4*4维矩阵
sampler1D           //1D纹理采样器
sampler2D           //2D纹理采样器,可以采集BItmap的纹理数据
samplerExternalOES  //2D纹理采样器,可以采集照相机的纹理数据(要导包: #extension GL_OES_EGL_image_external : require)
sampler3D           //3D纹理采样器'基本修饰'
attritude:           //一般用于各个顶点各不相同的量。如顶点颜色、坐标等。
uniform:         //一般用于对于3D物体中所有顶点都相同的量。比如光源位置,统一变换矩阵等。
varying:         //表示易变量,一般用于顶点着色器传递到片元着色器的量。
const:               //常量。"浮点精度(与顶点着色器不同的是,在片元着色器中使用浮点型时,必须指定浮点类型的精度,否则编译会报错。精度有三种"
lowp:                //低精度。8位。
mediump:         //中精度。10位。
highp:               //高精度。16位。precision <精度> <类型>   //使用方式制定默认精度"内建变量--顶点着色器"
(输入变量)
gl_Position:     //顶点坐标
gl_PointSize:        //点的大小,没有赋值则为默认值1,通常设置绘图为点绘制才有意义。"内建变量--片元着色器"
(输入变量)
gl_FragCoord:        //当前片元相对窗口位置所处的坐标。
gl_FragFacing:       //bool型,表示是否为属于光栅化生成此片元的对应图元的正面。
(输出变量)
gl_FragColor:        //当前片元颜色
gl_FragData:     //vec4类型的数组。向其写入的信息,供渲染管线的后继过程使用。
  • 纹理采样函数

texture 表示纹理采样,2D表示对2D纹理采样,3D表示对3D纹理采样
Lod 后缀,只适用于顶点着色器采样
Proj 表示纹理坐标st会除以q

texture2D
//2D纹理采样texture2D拥有三个参数,第一个参数表示纹理采样器。第二个参数表示纹理坐标,可以是二维、三维、或者四维。
//第三个参数加入后只能在片元着色器中调用,且只对采样器为mipmap类型纹理时有效。
texture2DProj                   //2D纹理采样
texture2DLod                    //2D纹理采样
texture2DProjLod                //2D纹理采样
textureCube
textureCubeLod
texture3D
texture3DProj
texture3DLod
texture3DProjLod

Matrix 矩阵

参考自 https://blog.csdn.net/junzia/article/details/52817978

setLookAtM()             //设置相机位置
frustumM()                  //透视投影(物体离视点越远,呈现出来的越小。离视点越近,呈现出来的越大)
orthoM()                    //正交投影(物体呈现出来的大小不会随着其距离视点的远近而发生变化)
multiplyMM()                //计算变换矩阵

EffectFactory

SurfaceTexture  表面纹理

setOnFrameAvailableListener()
updateTexImage()                        // 更新纹理

SurfaceTexture

https://blog.csdn.net/tq08g2z/article/details/77311938

setDefaultBufferSize(100, 100);                  //设置默认缓冲区大小
surfaceTexture.setOnFrameAvailableListener();   //当一个新的缓冲区由生产者入对时,你的应用将通过回调 (onFrameAvailable()) 被通知
updateTexImage()                                //这将释放之前持有的缓冲区,并从队列中获取新的缓冲区

Surface

new Surface(surfaceTexture);

Android OpenGLES2.0使用相关推荐

  1. Android OpenGLES2.0(十四)——Obj格式3D模型加载

    转自:http://blog.csdn.net/junzia/article/details/54300202 在博主<OpenGLES系列>文章中,最开始的几篇讲的就是OpenGL世界中 ...

  2. Android OpenGLES2.0(十六)——3D模型贴图及光照处理(obj+mtl)

    转自:http://blog.csdn.net/junzia/article/details/58272305 在Android OpenGLES2.0(十四)--Obj格式3D模型加载中实现了Obj ...

  3. Android OpenGLES2.0(五)——绘制立方体

    上篇博客中我们提到了OpenGLES中绘制的两种方法,顶点法和索引法.之前我们所使用的都是顶点法,这次绘制立方体使用索引法来绘制立方体. 构建立方体 上篇博客讲到正方形的绘制,立方体是是由六个正方形组 ...

  4. Android OpenGLES2.0(十七)——球形天空盒VR效果实现

    在3D游戏中通常都会用到天空盒,在3D引擎中也一般会存在天空盒组件,让开发者可以直接使用.那么天空盒是什么?天空盒又是如何实现的呢?本篇博客主要介绍如何在Android中利用OpenGLES绘制一个天 ...

  5. Android OpenGLES2.0(三)——等腰直角三角形和彩色的三角形

    上一篇博客中我们已经绘制出了一个直角三角形,虽然我们相对于坐标,我们设置的直角三角形的两腰是相等的,但是实际上展示出来的却并不是这样,虽然通过计算,我们可以把三角形的两腰计算一下比例,使它们在坐标上不 ...

  6. Android解码输出yuv,Android OpenGLES2.0 直接导出YUV420数据

    Android OpenGLES2.0中提供的glReadPixels方法提供的格式只有RGB的几种格式,但是这并不妨碍我们导出YUV格式的数据,因为不管是RGBA还是YUV,都不是glReadPix ...

  7. Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合

    Blend是OpenGL中的一个非常重要的部分,它可以让每个输出的源和目的颜色以多种方式组合在一起,以呈现出不同的效果,满足不同的需求. Blend相关函数及意义 在OpenGLES1.0中,Blen ...

  8. Android OpenGLES2.0(一)OpenGLES2.0基础介绍

    文章目录 什么是OpenGL ES? OpenGL ES可以做什么? OpenGL ES版本及Android支持情况 OpenGL ES 2.0的优点 OpenGL ES 2.0中基本概念 顶点着色器 ...

  9. Android OpenGLES2.0(一)——了解OpenGLES2.0

    什么是OpenGL ES? OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言.跨平台的编程接口规格的专业的图形程序接口.它用于三维图像(二维的亦可),是一个功能强 ...

  10. android 两种颜色融合,Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合

    Blend是OpenGL中的一个非常重要的部分,它可以让每个输出的源和目的颜色以多种方式组合在一起,以呈现出不同的效果,满足不同的需求. Blend相关函数及意义 在OpenGLES1.0中,Blen ...

最新文章

  1. 死磕Java并发:J.U.C之Condition
  2. java 子类强转父类 父类强转子类
  3. POJ 1852 Ants 分析
  4. 数据结构--赫夫曼树及其应用
  5. python 灰色系统预测GM
  6. 64位linux安装mysql数据库吗_linux下怎么安装mysql数据库
  7. office communications server 2007 标准版部署详细步骤及错误分析
  8. Ubuntu服务器长时间运行爬虫程序
  9. urlencode编码基本概念_URLencode编码简析
  10. Mac OS 连内外网
  11. APP界面常用的五种颜色搭配
  12. 计算机专业面试银行的自我介绍,银行面试自我介绍1分钟
  13. 【历史上的今天】2 月 17 日:谷歌收购 Blogger;英伟达创始人出生;微软发布 Windows 2000
  14. 今年天猫双11的这些技术,可能会改变整个零售行业
  15. 沃尔沃升级刷藏功能取消限速180km解除行车播放视频关闭自动启停系统
  16. 2017年乌镇互联网大会部分要点实地记录
  17. 同源策略是什么,有何作用
  18. BP神经网络通俗教程(matlab实现方法)
  19. 算法之二维数组(大炮打蚊子)
  20. 循环和switch语句中的continue、break

热门文章

  1. cs231n-svm作业
  2. pubg显示服务器安装失败,pubg更新错误怎么修复_更新pubg时出现错误的处理方法...
  3. Java实现 极光 im 聊天后台发送消息
  4. Udemy上Gephi教程笔记1
  5. 快手短视频解析去水印原理及源码,sign+盐签名算法,获得无水印播放地址
  6. sonar下载安装配置教程
  7. STM32F407——蓝牙模块CC2541
  8. scratch3.0 整体页面介绍
  9. J2EE(环境搭建)
  10. 怎么确定服务器是否支持ipmi,如何获取服务器的IPMI地址?