当前位置: 首页 > news >正文

【OPENGL ES 3.0 学习笔记】第一天:认识渲染管道

请添加图片描述

要理解 OpenGL ES 3.0 的渲染管道,咱们可以把它想象成一条**“3D数据变屏幕像素”的工厂流水线**——从“原材料”(顶点、颜色、纹理等数据)开始,经过一系列固定步骤的“加工”,最终产出“成品”(屏幕上的图像)。

整个流水线按顺序分为 6 个核心阶段,每个阶段只干自己的活。

1. 输入装配:给流水线送“原材料”

作用:把咱们准备好的“3D原材料”(顶点数据)整理好,传给下一站。

咱们画一个3D物体(比如一个三角形),首先得告诉电脑“这个三角形的3个顶点在哪”“每个顶点是什么颜色”“要不要贴纹理(图片)”——这些零散的信息就是“顶点数据”(比如顶点位置坐标、顶点颜色、纹理坐标等)。

这个阶段就像“仓库管理员”:把这些零散的顶点数据按规则打包(比如“3个顶点一组,组成一个三角形”),确认数据格式没问题后,整齐地送到下一个加工环节。
请添加图片描述

2. 顶点着色器:给每个“零件”单独塑形

作用:逐个处理每个顶点,核心是“把3D顶点坐标转换成屏幕上的2D位置”,顺便处理顶点的颜色、纹理坐标等属性。

这是流水线里第一个可编程阶段(开发者可以写代码控制它的逻辑),每个顶点都会“走一遍”这个着色器。

举个例子:咱们在3D空间里画一个三角形(顶点坐标是X/Y/Z的3D值),但屏幕是2D的——顶点着色器就负责做“透视计算”(比如“远处的顶点看起来小,近处的大”),把3D坐标转换成屏幕上的2D坐标(比如手机屏幕的像素位置)。

同时,它还能给顶点“打标记”:比如这个顶点的颜色是红色,那个是蓝色,后续步骤会根据这些标记给像素上色。

请添加图片描述

3. 图元装配:把“零件”拼成“小部件”

作用:把经过顶点着色器处理后的顶点,组装成“基本形状”(专业叫“图元”),并淘汰掉屏幕外的部分。

顶点是零散的“点”,咱们要的是“三角形”“线段”“点”这些基本形状——这个阶段就像“组装工”:

  • 按之前约定的规则(比如“3个顶点一组”),把顶点连成三角形;

  • 检查这个三角形是否在屏幕里:如果整个三角形都在屏幕外(比如在手机屏幕左边1000像素),就直接扔掉,不往下传(省资源);如果部分在屏幕里,就“裁剪”掉屏幕外的部分,只留屏幕内的形状。

请添加图片描述

4. 几何着色器:给“小部件”加新花样(可选)

作用:在已有的图元基础上,生成新的图元(比如把1个三角形变成2个),或者修改图元的形状。

这是 ES 3.0 新增的可编程阶段,但不是必须用(很多简单场景可以跳过)。它就像“高级加工师”,能做一些灵活的改造:

  • 比如想给三角形加个“边框”,可以用几何着色器在原三角形周围生成一圈线段;
  • 或者想把一个四边形拆成两个三角形,也能在这里处理。

请添加图片描述

5. 光栅化:把“小部件”切成“像素颗粒”

作用:把几何着色器输出的“矢量形状”(比如三角形,是数学定义的光滑形状),转换成屏幕上的“像素点”(专业叫“片元 Fragment”)。

这是流水线里的“切割环节”,比如一个三角形在屏幕上覆盖了100个像素,光栅化就会把这个三角形“拆成”100个片元,每个片元对应一个屏幕像素的位置(但还没上色)。

简单说:之前的步骤都是“画形状”,从这一步开始,才真正“对应到屏幕的像素”。

请添加图片描述

6. 片元着色器 + 逐片元操作:给“像素颗粒”上色+质检

这是流水线的最后两步,负责给像素上色并做最终把关,产出成品。

(1)片元着色器:给每个像素“涂颜色”

作用:给每个片元(像素)计算最终的颜色,是第二个可编程阶段(开发者能灵活控制颜色逻辑)。
上色的逻辑很灵活,比如:

  • 贴纹理:把一张图片(纹理)“贴”到片元上,比如给三角形贴一张木纹图,这里就会计算每个片元对应的木纹颜色;
  • 算光照:比如模拟阳光照射,三角形朝向阳光的面更亮,背阴的面更暗,这里就会根据光照方向计算每个片元的亮度;
  • 纯色填充:直接给所有片元涂红色、蓝色等。

总之,经过这一步,每个像素都有了自己的“颜色值”。

(2)逐片元操作:最后把关,输出成品

作用:对已经上色的片元做“最终质检”,合格的才放到屏幕上显示。
这一步是“固定功能阶段”(逻辑由OpenGL ES自带,开发者只能配置参数),核心干3件事:

  1. 深度测试:判断这个像素是否在“前面”——比如两个三角形重叠,后面的三角形会被前面的挡住,这里就会扔掉后面的像素(避免“穿模”);
  2. 模板测试:做一些特殊效果,比如画阴影、实现镜子反射(相当于用一个“模板”过滤掉不需要的像素);
  3. 混合:处理透明像素——比如半透明的玻璃,后面的像素颜色会和玻璃的颜色混合(比如玻璃是淡蓝色,后面是红色,混合后就是淡紫色)。

最后,通过所有测试的像素,会被写入“帧缓冲区”(相当于“成品仓库”),等一帧图像的所有像素都处理完,帧缓冲区就会把图像推到屏幕上,咱们就能看到最终的画面了。

请添加图片描述

用“画三角形”串联整个流程

咱们用“画一个彩色三角形”举个完整例子:

  1. 输入装配:把三角形的3个顶点数据(位置、颜色:顶点1红、顶点2绿、顶点3蓝)打包传给下一站;
  2. 顶点着色器:把3个顶点的3D坐标转换成屏幕2D坐标,同时保留“红、绿、蓝”的颜色标记;
  3. 图元装配:把3个顶点拼成三角形,确认在屏幕内,不裁剪;
  4. 几何着色器:简单场景跳过,直接传三角形;
  5. 光栅化:把三角形拆成屏幕上的100个片元(像素位置);
  6. 片元着色器:给这100个片元上色(从顶点的红、绿、蓝渐变过渡,比如中间是黄色);
  7. 逐片元操作:深度测试确认没有其他图形挡住这个三角形,混合关闭(不透明),最后把100个彩色像素写入帧缓冲区,显示到屏幕上。

关键知识点:可编程 vs 固定功能

整个管道里,只有3个阶段是“可编程”的(开发者能写代码控制),也是实现各种特效的核心:

  • 顶点着色器:控制顶点位置、基础属性;
  • 几何着色器:灵活生成/修改图元;
  • 片元着色器:控制像素颜色、纹理、光照。

其他阶段(输入装配、图元装配、光栅化、逐片元操作)是“固定功能”,开发者只能调参数(比如开启/关闭深度测试),不能改核心逻辑。

这样一来,OpenGL ES 3.0 的渲染管道就像一条分工明确的流水线——从3D数据到屏幕像素,每一步都有清晰的作用,开发者通过控制可编程阶段,就能实现从简单三角形到复杂3D游戏的各种画面啦!
请添加图片描述

http://www.dtcms.com/a/465182.html

相关文章:

  • 从数据沼泽到智能决策:数据驱动与 AI 融合的中台建设方法论与技术实践指南(二)
  • Trae Solo+豆包Version1.6+Seedream4.0打造“AI识菜通“
  • Linux 基金会牵头成立 React 基金会:前端开源生态迎来里程碑式变革
  • 机器学习数据处理
  • 学习笔记: 从C语言基础到Python基础的过渡
  • C语言编写、测试、维护、审查规范
  • 公司网站建设价格标准东莞产品网络推广
  • 从KPI入手,全面掌握LTE网络性能测试与优化
  • 基于LLaMA-Factory的LoRA微调实战与性能剖析​
  • 网络层协议之VRRP协议
  • 3.2 无连接传输: UDP
  • 利用R语言绘制直方图
  • Transformer Decoder 中序列掩码(Sequence Mask / Look-ahead Mask)
  • 《R for Data Science (2e)》免费中文翻译 (第9章) --- Layers(2)
  • php集成VSCode开发
  • 邯郸市民网企业网站优化公司有哪些
  • 陕西 餐饮 网站建设外贸网站建设公司价格
  • 开源书签管理器Faved
  • 【全开源】企业微信SCRM社群营销高级版系统+uniapp前端
  • 深入浅出MATLAB数据可视化:超越plot()
  • 基于IMBT框架的定制开发开源AI智能名片S2B2C商城小程序直播营销规范化研究
  • 开源 C++ QT QML 开发(十五)通讯--http下载
  • 【CANN训练营】+开源之星+GitCode算子开发环境快速搭建手册
  • 西安网站建设网站网站集约化建设
  • 设计网站名称wordpress无法发送
  • python获取国内股票数据
  • Win64下MSYS2开发环境完整配置指南
  • Linux进程第九讲——进程状态深度解析(三):僵尸进程(Z态)的本质、风险与实验验证
  • 系统之间文件同步方案
  • VTK实战:vtkImplicitSelectionLoop——用隐式函数实现“环选”的核心逻辑与工程实践