【我的OpenGL学习进阶之旅】学习OpenGL ES 3.0 的实战 Awsome Demo (上)

一、介绍

最近在学习OpenGL ES 3.0 相关技术,写了一个Demo工程,记录学习。

三篇完整版链接:

1.1 项目地址:

1.2 项目介绍

主要是将下面来源的特效,自己手动敲一遍,熟悉OpenGL ES相关API和GLSL语法以及C++语法

  1. 《OpenGL ES 3.0编程指南》 这本书
  2. 【Learn OpenGL ES】 网站的一些示例
  3. 字节流动的 NDK_OpenGLES_3_0 项目代码
  4. 部分ShaderToy网站和 GLSL SANDBOX 网站上的特效移植到android端
  5. 转场动画GLTransitions网站上的特效移植到android端

1.3 相关链接

关于 OpenGL ES的相关知识,
可以参考下面的博客查看:

  1. 字节卷动 的 OpenGL ES 专栏
  2. 字节流动 的 Android OpenGLES 3.0 专栏
  3. 【Learn OpenGL ES】
  4. ShaderToy
  5. GLSL SANDBOX
  6. 转场动画 https://gl-transitions.com/gallery

二、案例效果展示

1. 展示一个基本的红色三角形

颜色在片段着色器写死的红色

在这里插入图片描述

2. 展示一个基本的蓝色三角形

颜色由glVertexAttrib4fv传给片段着色器

在这里插入图片描述

3. 展示一个基本的由红、绿、蓝三种颜色绘制而成的三角形

使用了顶点缓冲对象(Vertex Buffer Objects, VBO) 和 EBO 技术

在这里插入图片描述

4. 展示一个基本的由红、绿、蓝三种颜色绘制而成的三角形

使用了顶点缓冲对象(Vertex Buffer Objects, VBO) 、 EBO 和 映射缓冲区对象(Map Buffer) 技术

在这里插入图片描述

5. 展示一个基本的由红、绿、蓝三种颜色绘制而成的三角形

使用了 VBO 、 EBO 和 VAO 技术

在这里插入图片描述

6. 对比 两个基本的由红、绿、蓝三种颜色绘制而成的三角形

一个使用VBO绘制,另外一个不使用VBO绘制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5yRMP2e6-1640695721701)( https://github.com/ouyangpeng/OpenGLESDemo/blob/master/pics/triangle4.png)]

7. 展示一个在不停旋转的红色立方体

使用到了MVP矩阵(模型矩阵,观察矩阵和投影矩阵)技术

在这里插入图片描述

8. 展示一个简单的2D Texture 纹理

学习如何绘制一个2D纹理

在这里插入图片描述

9. 展示一个立方体贴图Cubemap

学习如何绘制一个立方体贴图Cubemap

10. 展示mip贴图(mipmapping)

学习纹理过滤和mip贴图(mipmapping)知识
在这里插入图片描述

11. 对比 三种不同纹理包装模式

12. 展示一个多重纹理

学习如何使用多重纹理
在这里插入图片描述

13. 展示一个不停变化位置的爆炸效果

学习如何用点精灵渲染粒子爆炸效果

在这里插入图片描述

14. 使用变化反馈的粒子系统实现源源不断喷射的爆炸效果

学习 使用变化反馈的粒子系统

在这里插入图片描述

15. 展示 3D纹理噪音

学习实现3D纹理噪音

在这里插入图片描述

16. 展示 多重渲染技术同时渲染到4个目标

学习 MRT(多重渲染目标) 技术

在这里插入图片描述

17 展示一幅立体地形画

学习 用顶点纹理读取渲染地形 技术
在这里插入图片描述

18 展示 深度纹理的阴影 效果图

使用深度纹理的阴影
在这里插入图片描述

19 展示 三个彩色三角形 不停旋转的效果

学习绘制三角形以及使用矩阵变化进行旋转的效果

请添加图片描述

20 展示 一个点和五个立方体 不停旋转的效果

学习 使用两个程序对象分别绘制点和立方体,并且使用矩阵变化进行旋转的效果
请添加图片描述

21 展示 一个点和五个立方体 不停旋转的效果

这是在上面案例的基础上添加每像素照明

请添加图片描述

22 展示 一个点和五个立方体 不停旋转的效果 , 并且立方体有基本的Texture纹理

这是在上面案例的基础上添加的基本纹理

请添加图片描述

23 展示 一个点和五个立方体 不停旋转的效果 , 然后切换混合模式的效果

展示触摸屏幕切换 混合模式的效果
请添加图片描述

24 Texture纹理 的不同过滤模式

本课程将介绍OpenGL ES中可用的不同纹理过滤模式
请添加图片描述

25 使用 顶点缓冲区对象(VBO)来绘制多个立方体

学到的知识点:立方体的数量可以改变,可以切换是否使用VBOs,Native可以调用Java方法
请添加图片描述

26 使用 IBO 来绘制

本课程将介绍索引缓冲区对象(IBO)
请添加图片描述

27 纹理映射

纹理映射就是通过为图元的顶点坐标指定恰当的纹理坐标,通过纹理坐标在纹理图中选定特定的纹理区域,最后通过纹理坐标与顶点的映射关系,将选定的纹理区域映射到指定图元上

在这里插入图片描述

28 YUV 渲染

YUV 图不能直接用于显示,需要转换为 RGB 格式,而 YUV 转 RGB 是一个逐像素处理的耗时操作,在 CPU 端进行转换效率过低,这时正好可以利用 GPU 强大的并行处理能力来实现 YUV 到 RGB 的转换

这个案例学习如何渲染YUV图像
在这里插入图片描述

29 使用 FBO 技术,实现将彩色照片渲染成黑白照片

学习 FBO(帧缓冲区对象) 进行离屏渲染
在这里插入图片描述

30 使用 EGL渲染 来实现 马赛克、网格、旋转、边缘、放大、形变等效果

学习 使用EGL渲染 技术
请添加图片描述

31 对纹理进行缩放和旋转

单指可以对图片进行旋转,双指可以进行缩放
请添加图片描述

32 学习光照基础

学习冯氏光照模型(Phong Lighting Model),它由三种元素光组成,分别是环境光(Ambient Lighting)、散射光(Diffuse Lighting)及镜面光(Specular Lighting)
请添加图片描述

33 学习多光照实例

学习冯氏光照模型(Phong Lighting Model)的多光照实例
请添加图片描述

34 学习 OpenGL ES 实例化(Instancing)

OpenGL ES 实例化(Instancing)是一种只调用一次渲染函数就能绘制出很多物体的技术,可以实现将数据一次性发送给 GPU ,告诉 OpenGL ES 使用一个绘制函数,将这些数据绘制成多个物体

请添加图片描述

35 学习 OpenGL ES 模板测试

OpenGL ES 模板测试与深度测试类似,主要作用是利用模板缓冲区(Stencil Buffer)所保存的模板值决定当前片段是否被丢弃,且发生于深度测试之前。

请添加图片描述

36 学习 OpenGL ES 混合

OpenGL ES 混合本质上是将 2 个片元的颜色进行调和,产生一个新的颜色。
OpenGL ES 混合发生在片元通过各项测试之后,准备进入帧缓冲区的片元和原有的片元按照特定比例加权计算出最终片元的颜色值,不再是新(源)片元直接覆盖缓冲区中的(目标)片元。
在这里插入图片描述

37 展示一个不停变化位置的粒子效果

再次实现一个粒子效果,不一样的实现方式
请添加图片描述

38 展示一个立方体贴图(天空盒),可以旋转

使用立方体贴图实现一个天空盒效果
请添加图片描述

39 展示一个PBO示例

OpenGL PBO(Pixel Buffer Object),被称为像素缓冲区对象,主要被用于异步像素传输操作。PBO 仅用于执行像素传输,不连接到纹理,且与 FBO (帧缓冲区对象)无关。
请添加图片描述

未完待续…

根据引用\[1\]中的描述,修改`slidesPerView`属性可以修改`swiper-slide`的宽度,但不能直接修改`swiper-slide`之间的间隔距离。如果你想要修改间隔距离,可以尝试使用CSS来调整样式。你可以通过设置`margin`或`padding`属性来改变`swiper-slide`之间的间隔距离。 另外,根据引用\[2\]和引用\[3\]中的代码,你可以看到在Vue.js中使用`vue-awesome-swiper`组件时,可以通过设置`slidesPerView`属性来控制`swiper-slide`之间的间隔距离。在引用\[2\]中的代码中,`swiperOption`对象中的`slidesPerView`属性被设置为`3.08`,这将影响`swiper-slide`之间的间隔距离。你可以根据需要调整这个值来改变间隔距离。 总结起来,如果你使用的是`vue-awesome-swiper`组件,可以通过设置`slidesPerView`属性来调整`swiper-slide`之间的间隔距离。如果你使用的是其他版本的Swiper,你可以尝试使用CSS来调整间隔距离。 #### 引用[.reference_title] - *1* [原来swiper的这个swiper-slide的间距调的这儿!](https://blog.csdn.net/m0_65292523/article/details/126361315)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [swiper、vue-awsome-swiper插件使用](https://blog.csdn.net/weixin_43123984/article/details/126877867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [swiper2 swiper-slide 之间的间距调整](https://blog.csdn.net/weixin_30625691/article/details/98935677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节卷动

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值