侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

OpenGL ES 渲染图形管线

2022-06-14 星期二 / 0 评论 / 0 点赞 / 99 阅读 / 5667 字

注:本文旨在记录笔者的学习过程,仅代表笔者个人的理解,如果有表述不准确的地方,欢迎各位指正!因为涉及到的概念来源自网络,所以如有侵权,也望告知!前言本文主要目的是进一步了解OpenGL ES图形管线的

注:本文旨在记录笔者的学习过程,仅代表笔者个人的理解,如果有表述不准确的地方,欢迎各位指正!因为涉及到的概念来源自网络,所以如有侵权,也望告知!

前言

本文主要目的是进一步了解OpenGL ES图形管线的基础概念。

正文

1.定义

.

OpenGL ES 开放式图形库(OpenGL的)⽤于可视化的⼆维和三维数据。它是⼀个多功能开放标准图形库,⽀持2D和3D数字内容创建,机械和建筑设计,虚拟原型设计,⻜⾏模拟,视频游戏等应⽤程序。您可以使⽤OpenGL配置3D图形管道并向其提交数据。顶点被变换和点亮,组合成图元,并光栅化以创建2D图像。OpenGL旨在将函数调⽤转换为可以发送到底层图形硬件的图形命令。由于此底层硬件专⽤于处理图形命令,因此OpenGL绘图通常⾮常快。

.

OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本,它消除了冗余功能,提供了⼀个既易于学习⼜更易于在移动图形硬件中实现的库。

经过多年发展,现在主要有三个版本:OpenGL ES 1.x,针对固定功能流⽔管线硬件。OpenGL ES 2.x针对可编程流⽔管线硬件OpenGL ES 3.X,OpenGL ES 2.0的扩展。

2.图形管线

OpenGL ES的渲染图形管线如图所示,从CPU层可以输入顶点坐标、纹理坐标和纹理图像数据到GPU层,同时也可以输出参数(通常是变换矩阵)到GPU层,整个的渲染过程就是将输入数据从CPU 到 GPU中,然后再GPU各个组件模块中依次执行,到最后输出一块帧缓存数据。

从OpenGL ES 2.x开始,OpenGL ES支持可编程图形管线。当然整个管线流程中大部分组件的处理流程也还是GPU内部固定的,也是通过CPU层传入输入数据和参数到各个部件中,只有 Vertex Shader(顶点着色器)和 Fragment Shader(片元着色器)是可编程的。

3.各部件职责业务

a.顶点着色器

.1) 矩阵变换顶点位置..2) 计算光照公式⽣成逐顶点颜⾊..3) ⽣成/变换纹理坐标.

总结:它可以⽤于执⾏⾃定义计算,实施新的变换,照明或者传统的固定功能所不允许的基于顶点的效果。

b.图元装配

.将顶点数据计算成⼀个个图元(Primitive): 点、线、三⻆形等。在这个阶段会执⾏裁剪、透视分割和Viewport变换操作。图元类型和顶点确定将被渲染的单独图元。对于每个单独图元及其对应的顶点,图元装配阶段执⾏的操作包括:将顶点着⾊器的输出值执⾏裁剪、透视分割、视⼝变换后进⼊光栅化阶段。.

c.光栅化

.光栅化就是将图元转化成⼀组⼆维⽚段的过程。⽽这些转化的⽚段将由⽚元着⾊器处理。这些⼆维⽚段就是屏幕上可绘制的像素。.

d.⽚元着⾊器

.1) 计算颜⾊..2) 获取纹理值..3) 往像素点中填充颜⾊值(纹理值/颜⾊值).

总结: 它可以⽤于图⽚/视频/图形中每个像素的颜⾊填充(⽐如给视频添加滤镜,实际上就是将视频中每个图⽚的像素点颜⾊填充进⾏修改)。

e.逐⽚段操作

.**像素归属测试**: 确定帧缓存区中位置(Xw,Yw)的像素⽬前是不是归属于OpenGL ES所有。例如如果⼀个显示OpenGL ES帧缓存区View被另外⼀个View 所遮蔽,则窗⼝系统可以确定被遮蔽的像素不属于OpenGL ES 上下⽂,从⽽不全显示这些像素。⽽像素归属测试是OpenGL ES 的⼀部分,它不由开发者开⼈为控制,⽽是由OpenGL ES 内部进⾏。..**裁剪测试**: 裁剪测试确定(Xw,Yw)是否位于作为OpenGL ES状态的⼀部分裁剪矩形范围内,如果该⽚段位于裁剪区域之外,则被抛弃。..**深度测试**: 输⼊⽚段的深度值进步⽐较,确定⽚段是否拒绝测试。..**混合**: 混合将新⽣成的⽚段颜⾊与保存在帧缓存的位置的颜⾊值组合起来。..**抖动**:抖动可⽤于最⼩化因为使⽤有限精度在帧缓存区中保存颜⾊值⽽产⽣的伪像。.

.
.

广告 广告

评论区