
OpenGL ES
文章平均质量分 86
本专栏梳理了OpenGL ES相关技术栈
little_fat_sheep
图形学领域爱好者,未来将在图形渲染(OpenGL、LibGDX、Filament、Unity3D、UE)、图形编解码(FFmpeg)等领域长期深耕。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【OpenGL ES】在Windows上手撕一个mini版的渲染框架
摘要 本文介绍了一个名为"glcore"的mini版OpenGLES渲染框架的设计与实现。该框架旨在封装约70个常用OpenGLES指令,简化图形渲染开发流程,提高性能并方便跨平台使用。 框架的主要特点包括: 封装友好:提供EGL环境搭建、着色器程序生成、网格构建等基础能力 代码规整:设计了规范的bind/unbind接口体系 易于扩展:通过TextureAction接口统一管理纹理活动 性能高效:使用VBO、IBO、VAO缓存数据,减少CPU-GPU交互 跨平台:基于C++实现,核心库原创 2025-07-18 00:42:56 · 928 阅读 · 0 评论 -
【OpenGL ES】Windows上OpenGL环境搭建
本文介绍了Windows平台下OpenGL开发的四种主流方案:GLFW+Glad、GLFW+GLEW、freeglut+Glad和freeglut+GLEW。文章首先对比了GLFW与freeglut的特性差异(现代轻量级vs.兼容性方案),以及Glad与GLEW的区别(灵活定制vs.通用加载),推荐GLFW+Glad作为最佳组合。详细说明了各个库的环境搭建方法,包括下载预编译库或源码编译,并提供了基于CMake的项目目录结构规范。最后通过四个完整示例分别演示了四种搭配的具体实现,包含CMake配置、事件回调原创 2025-07-16 00:50:37 · 866 阅读 · 0 评论 -
【OpenGL ES】在Android上手撕一个mini版的渲染框架
OpenGLES渲染框架glcore设计与实现 本文介绍了一个基于C++的OpenGLES渲染框架glcore的设计与实现。该框架旨在简化OpenGLES开发流程,提高渲染效率,并具有良好的跨平台特性。 框架特点 封装友好:对70个常用OpenGLES指令进行封装,提供EGL环境搭建、着色器程序生成、网格构建等基础功能 性能优化:通过VBO、IBO、VAO缓存数据到显存,减少CPU-GPU数据传输,并缓存attribute和uniform的location 跨平台:基于C++实现,核心依赖库独立封装,方便迁原创 2025-07-13 17:46:00 · 1209 阅读 · 0 评论 -
【OpenGL ES】不用GLSurfaceView,如何渲染图像
本文介绍了在Android中不使用GLSurfaceView实现OpenGL ES渲染的两种方案:1)继承SurfaceView,通过EGL创建窗口表面;2)继承TextureView,利用SurfaceTexture创建EGL渲染表面。两种方案都详细展示了EGL环境的搭建过程,包括创建Display、Config、Context和Surface,并绑定到当前线程。第一种方案通过SurfaceHolder获取Surface,第二种通过TextureView的SurfaceTexture创建Surface。原创 2025-06-19 00:10:36 · 801 阅读 · 0 评论 -
【OpenGL ES】GLSL基础语法
本文将介绍 GLSL 中数据类型、数组、结构体、宏、运算符、向量运算、矩阵运算、函数、流程控制、精度限定符、变量限定符(in、out、inout)、函数参数限定符等内容,另外提供了一个 include 工具,方便多文件管理 glsl 代码,实现代码的精简、复用。 Unity 中 Shader 介绍详见 →【Unity3D】Shader常量、变量、结构体、函数,渲染管线介绍详见 →【OpenGL ES】渲染管线。原创 2024-12-29 00:54:32 · 1696 阅读 · 0 评论 -
【OpenGL ES】渲染管线
渲染管线是指:将模型的顶点序列、颜色系列、纹理序列、法线序列等数据输入到 OpenGL ES 中,到输出屏幕,这个阶段数据所经历的流程。裁剪:进行透视分割,并剔除视锥体外面的顶点,根据 x, y, z 的值是否在 [-1, 1] 之间判断是否淘汰顶点;屏幕映射:根据视口(Viewport)大小,将近平面上的点映射到屏幕上图元装配:根绝输入顶点序列和和图元类型(mode)组装图元;光栅化:对图元内部进行插值,使其与屏幕中的像素一一对应;裁剪测试:指定一个矩形的剪裁区域,当启用剪裁测试后,只有在这个区域原创 2022-09-09 01:42:42 · 6494 阅读 · 3 评论 -
【OpenGL ES】光影(光照与阴影)效果
绘制阴影,需要用到深度纹理,即从光源角度看模型并绘制一张纹理图,纹理图的颜色代表了模型上的点离光源的深度,只有离光源较近的点才会绘制到深度纹理图中,被遮挡的点不会被绘制到深度纹理图中。判断地平面中的点是否处于阴影中,需要将此点变换到光源坐标系中,然后计算变换后的点离光源的深度,判断此深度是否大于纹理图中相应位置的深度,如果大于说明此点在阴影中。......原创 2022-05-03 02:25:54 · 3575 阅读 · 11 评论 -
【OpenGL ES】Blinn改进的冯氏光照模型
1 前言光照元素主要有环境光(ambient)、漫反射光(diffuse)、镜面反射光(specular),光照模型主要有冯氏模型和 Blinn 改进的冯氏模型,两者区别在与镜面反射光的计算,冯氏模型根据反向量和观察向量计算镜面反射光,Blinn 改进的冯氏模型根据半向量和法向量计算镜面反射光。模型合成颜色:finalColor = (ambient + diffuse + specular) · modelColor环境光:ambient =ambientSt...原创 2022-04-15 01:20:27 · 2974 阅读 · 0 评论 -
【OpenGL ES】EGL+FBO离屏渲染
1 前言FBO离屏渲染中使用 GLSurfaceView 来驱动 Renderer 渲染图片,为了隐藏 GLSurfaceView,将其设置为透明的,并且宽高都设置为1。本文将使用 EGL 代替 GLSurfaceView 生成 OpenGL ES 的渲染环境,实现离屏渲染,将渲染后的图片显示在 ImageView 上。EGL 为 OpenGL ES 提供了绘制表面(或渲染画布),是 OpenGL ES 与显示设备的桥梁,让 OpenGL ES 绘制的内容能够在呈现...原创 2022-04-01 01:30:33 · 8147 阅读 · 6 评论 -
【OpenGL ES】FBO离屏渲染
OpenGL 默认把 framebuffer 当作渲染目的地,它由窗口系统创建并管理。应用程序也可以创建额外非可显示的 framebuffer object(FBO),以区别窗口系统提供的 framebuffer。OpenGL 应用程序可以重定向渲染目的地,让它输出到 FBO 而不是窗口系统提供的 framebuffer。与窗口系统提供的 framebuffer 类似,FBO 包含一系列渲染目的地:颜色缓冲区(color buffer)、深度缓冲区(depth buffer)、模板缓冲区原创 2022-03-26 00:46:48 · 7313 阅读 · 3 评论 -
【OpenGL ES】基于ValueAnimator的旋转、平移、缩放动效
1 前言ValueAnimator 基于 Choreographer 的 frame callback 机制,周期性(约16.7ms,与屏幕帧率相关)执行其 doAnimationFrame() 方法,回调监听器中相应方法,刷新 UI 实现动画效果。ValueAnimator 是 Android 系统提供的时钟回调类,可以为其提供插值器,并注册 AnimatorUpdateListener 监听器、AnimatorUpdateListener 监听器。当调用 Valu...原创 2022-03-23 00:52:05 · 4962 阅读 · 0 评论 -
【OpenGL ES】渐变凸镜贴图
1 前言正方形图片贴到圆形上中将正方形图片上的纹理映射到圆形模型上,凸镜贴图中介绍了将圆形图片上的纹理映射到凸镜模型上。如果将原图片逐渐变为凸镜效果,中间的变化过程又是什么样的?图片的纹理中心为 tc,图片中任意一点记为 t,tc 和 t 映射到凸镜模型中的坐标分别为 vc 和 v,渐变凸镜贴图的本质是:纹理坐标不变,映射的凸镜模型的半径逐渐变小,凸镜截面扇形角逐渐变大,直到凸镜变为半球,并且在变化的过程中始终保持 v 与 vc 的距离球面距离(过 v 与 vc ...原创 2022-03-22 02:12:47 · 584 阅读 · 0 评论 -
【OpenGL ES】透视变换原理
MVP矩阵变换中主要介绍了模型变换(平移、旋转、对称、缩放)和观测变换基本原理,本文将介绍透视变换的基本原理。如下图,近平面和远平面间棱台称为视锥体,表示可见区域范围,视锥体以外的空间将被裁剪丢弃,视锥体内的模型通过透视变换投影到近平面上,近平面上得到的平面图形就是屏幕上要显示的模型的图形。近平面的高度为 2(区间为 [-1, 1],为方便计算,已归一化),宽度也为 2。当相机位置和模型位置已固定时,由于近平面的宽高已固定,因此可以通过平移近平面的位置控制模型显示的缩放大小。原创 2022-03-21 00:41:32 · 3215 阅读 · 2 评论 -
【OpenGL ES】凸镜贴图
正方形图片贴到圆形上中将正方形图片上的纹理映射到圆形模型上,同理,也可以将圆形上的纹理映射到凸镜的球形曲面上。如下图,最左边的竖条是原图片的截面(纹理坐标),最右边的竖条是变换后的顶点模型截面(顶点坐标)。原创 2022-03-14 02:00:35 · 4040 阅读 · 1 评论 -
【OpenGL ES】正方形图片贴到圆形上
1 前言 纹理贴图中介绍了将矩形图片贴到矩形模型上,本文将介绍:在不裁剪图片的情况下,将正方形的图片贴到圆形模型上。思考:实数区间 [0, 1] 与 [0, 2] 的元素可以建立一一映射关系么?答案是肯定的,如:y=2*x、y=2*x^2、y=2*e^x/e^2、y=2*ln(x+1)/ln2、y=2*sin(π/2*x) 等等,其中 x∈[0, 1],y∈[0, 2]。 同理,在二维平面上,也可以构造一个函数,使得正方形上的点与圆形上的点一一对应。...原创 2022-03-13 17:50:52 · 4142 阅读 · 0 评论 -
【OpenGL ES】立方体手动旋转
本文主要介绍使用 OpenGL ES 绘制立方体,并实现手动触摸事件控制立方体旋转。为方便控制触摸旋转,假设旋转轴始终在 xoy 平面上,设 z 轴的方向向量 u = (0, 0, 1),触摸方向向量为 v(起点为ACTION_DOWN 时坐标,终点 ACTION_MOVE 时坐标),则旋转轴 w = u x v(x 为向量叉乘运算,运算结果仍然是一个向量,并且 w 垂直于 uov 平面)。在每次触摸结束时(ACTION_UP),为保证下次触摸事件与立原创 2021-11-22 00:31:16 · 3464 阅读 · 0 评论 -
【OpenGL ES】绘制魔方
在立方体贴图(6张图)中,绘制了一个立方体,贴了 6 张图,本文的魔方案例,将实现绘制 27个立方体,贴 162 张图。贴图图片如下: 说明:inside.png 为魔方内部色块,用粉红色块代替白色块是为了凸显白色线框。读者如果对 OpenGL ES 不太熟悉,请回顾以下内容:绘制三角形绘制立方体MVP矩阵变换纹理贴图立方体贴图(6张图)原创 2021-11-07 22:33:13 · 1822 阅读 · 3 评论 -
【OpenGL ES】立方体贴图(6张图)
1 前言 本文通过一个立方体贴图的例子,讲解三维纹理贴图的应用,案例中使用 6 张不同的图片给立方体贴图。本文涉及到的知识点主要包含:三维绘图、MVP 矩阵变换、纹理贴图,读者如果对 OpenGL ES 不太熟悉,请回顾以下内容:绘制立方体 MVP矩阵变换 纹理贴图项目目录如下:2 案例MainActivity.javapackage com.zhyan8.texture3d;import android.opengl....原创 2021-11-04 23:47:54 · 3335 阅读 · 0 评论 -
【OpenGL ES】纹理贴图
纹理贴图是指:将图片贴在模型的表面。 纹理贴图的本质是:将图片划分为一系列三角形,使得图片顶点序列与模型顶点序列中的顶点一一对应,对于模型中任意三角形内部的坐标和图片中对应三角形内部的坐标,可以通过插值,建立一一对应关系,模型中任意位置的颜色由其对应的图片位置的颜色填充。原创 2021-10-29 00:00:43 · 3268 阅读 · 0 评论 -
【OpenGL ES】MVP矩阵变换
空间坐标系建立后,空间中任何一个点都对应一个向量,设空间中一向量为 [a, b, c]',为方便采用统一的格式描述线性变换,将三维空间中的向量 [a, b, c]' 映射到四维空间中的向量 [a, b, c, 1]',同时,线性变换采用 4x4 的矩阵描述。所有向量 [a, b, c, 1]' 生成的空间仍然是一个三维空间,它是四维空间中的一个三维子空间。对与某些线性变换(如平移变换),若使用 4x4 矩阵描述,此矩阵可以固定,不必依赖待变换的向量;若使用 3x3 矩阵描述,此矩阵不能固原创 2021-10-21 08:43:39 · 5216 阅读 · 0 评论 -
【OpenGL ES】绘制立方体
1 前言 本文主要介绍使用 OpenGL ES 绘制立方体,读者如果对 OpenGL ES 不太熟悉,请回顾以下内容:绘制三角形 绘制彩色三角形 绘制正方形 绘制圆形 在绘制立方体的过程中,主要用到了 MVP (Model View Projection)矩阵变换。Model:模型变换,施加在模型上的空间变换,包含旋转变换(rotateM)、平移变换(translateM)、对称变换(transposeM); View:观测变换,施加在观测点上的变换,用于调...原创 2021-10-18 00:16:17 · 2203 阅读 · 1 评论 -
【OpenGL ES】绘制圆形
1 前言【OpenGL ES】绘制三角形中介绍了绘制三角形的方法,【OpenGL ES】绘制正方形中介绍了绘制正方形的方法,本文将介绍绘制圆形的方法。项目目录如下:2 案例MainActivity.javapackage com.zhyan8.circle;import android.opengl.GLSurfaceView;import android.os.Bundle;import androidx.appcompa...原创 2021-10-10 16:02:35 · 3149 阅读 · 0 评论 -
【OpenGL ES】绘制正方形
1 前言【OpenGL ES】绘制三角形中介绍了绘制三角形的方法,本文将介绍绘制矩形的方法。项目目录如下:2 案例MainActivity.javapackage com.zhyan8.rectangle;import android.opengl.GLSurfaceView;import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;...原创 2021-10-08 00:55:41 · 1473 阅读 · 0 评论 -
【OpenGL ES】绘制彩色三角形
1 前言【OpenGL ES】绘制三角形中介绍了绘制普通三角形的方法,本文将绘制彩色三角形的方法。项目目录如下:2 案例MainActivity.javapackage com.zhyan8.triangle; import android.opengl.GLSurfaceView;import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity...原创 2021-09-17 00:42:41 · 861 阅读 · 0 评论 -
【OpenGL ES】绘制三角形
1前言 OpenGL ES 绘制图形主要有 glDrawArrays 和 glDrawElements 2个接口。 1)glDrawArraysvoid glDrawArrays( int mode, //渲染的图元类型 int first, //渲染的起始索引 int count //渲染的顶点数) 图元类型(mode)主要有:GL_POINTS:绘制顶点 GL_LINES:绘制线段,如顶点序列:1234,绘制...原创 2021-09-16 01:37:02 · 1941 阅读 · 0 评论 -
【OpenGL ES】第一个案例
1 前言 OpenGL 是由 SGI 公司开发的一套 3D 图形软件接口标准,由于具有体系结构简单合理、使用方便、与操作平台无关等优点,OpenGL 迅速成为一种 3D 图形接口的工业标准,并陆续在各种平台上得以实现。 OpenGL ES 是 OpenGL 的子集,相对 OpenGL 删减了一些低效能的操作方式,专为内嵌和移动设备设计的一个 2D/3D 轻量图形库。 本文将通过绘制一个单色背景案例展示 OpenGL ES 的基本用法,项目目录如下:...原创 2021-09-07 00:46:39 · 733 阅读 · 2 评论