一张图了解OpenGL的渲染架构

初学者在初学OpenGL时,很多时候会对OpenGL的渲染架构感到困惑,不清楚它是怎么一个渲染流程,常将Arributes直接传递到片元着色器,或者为了将属性直接传递到片元着色器,而通过uniform传递到片元着色器等,这样的操作都是错误的,OpenGL的数据传输都有明确的届定。下面,我们就来看看OpenGL的渲染架构并了解它的数据传输方式和特点。

在这里插入图片描述

  • 上面就是OpenGL的渲染架构啦,我们在处理任何图形渲染的时候都是依据它,而基于OpenGL 封装的框架都是也都是遵循这个图的规则。

接下来,我们来解析下这张图,探索图形的渲染架构:

一、Client与Server

这里有两个很重要的端,分别是Client和Server,那它们是不是我们平常开发中具有不同职能能力的客户端和服务端,答案是否定的。

  • Client:它与我们平常开发所说的前端iOS或者android开发不一样,它是指CPU上所存储的代码,我们叫客户端。比如,我们会用到OpenGL的代码,C代码,C++代码。
  • Server:它调用的是GPU芯片,顶点着色器和片元着色器传递颜色,我们会不断的从客户端把数据传到Server,不断的执行起来。

总的来说,Client就是我们编写的程序,而Server是计算机图形硬件厂商所提供的OpenGL的实现。

如果服务端停止工作等待客户端,或者客户端停止工作来等待服务端做好接受更多的命令和准备,我们把这种情况成为管线停滞。

二、Shader

着色器(Shader)是用来实现图像渲染的,用来替代固定渲染管线的可编辑程序。主要有Vertex Shader(顶点着色器) 和 Fragment Shader(片段着色器)两种。

  • 顶点着色器是在GPU上运行的小程序。顾名思义,顶点着色器是用来处理顶点数据的。
  • 片段着色器就像顶点着色器一样,片段着色器也是运行在GPU上的小程序。顾名思义,用它来处理片段。如图上,顶点着色器处理完顶点数据后,Primitive Assembly将三个为一组的顶点进行图元装配和光栅化,而片断着色器则负责输出每个三角形像素的最终颜色。

基本上来说,它是这样运行的:片段着色器将顶点着色器输出的片段作为输入,片段的顶点属性已被光栅化单元进行了插值处理。

三、Texture Data,Uniforms,Attributes

要实现图形的渲染,需要向着色传递数据,否则,什么都无法实现。
另外,我们称通道为传递数据的一种方式。

通常来说,Texture Data,Uniforms,Attributes(ins)数据都会传到顶点着色器,但是顶点着色器并不会处理太多关于纹理的计算,纹理数据更多的是片段着色器来处理。下面,我们来细讲下三种数据:

  • Attributes(属性)
    1、Attributes常为需要改变的数据,比如:颜色数据,顶点数据,纹理坐标,光照法线;
    2、可以直接传递到顶点着色器,间接传递到片元着色器,不能为了将属性直接传递到片元着色器而通过uniform传递到片元着色器;
    3、属性值可以是浮点数、整数、布尔数据。

  • Uniforms(统一)
    1、Uniforms值是比较统一的,不需要发生太多改变;
    2、可以直接传递到顶点着色器和片元着色器;
    3、uniforms可以是浮点数、整数、布尔数据。

eg:图形的旋转怎么实现?我们通过 每个顶点 * 变换矩阵。而这个变换矩阵不会发生太多改变,那我们称这个矩阵为uniforms值,所以uniforms也可以是矩阵。

  • Texture Data(纹理数据)
    在顶点着色器、片段着色器中都可以对纹理数据进行采样和筛选。通常来说,片段着色器对一个纹理值进行采样,然后在一个三角形表面应用渲染纹理数据。然而,纹理数据,不仅仅表现在图形,很多时候,图形文件格式都是以无符号字节(每个颜色通道8位)形式对颜色分量进行存储的。常用的有颜色填充和纹理填充。

eg:什么时候会用到纹理呢?比如滤镜,滤镜实际上是对图片本身做处理的,它是在读取的时候,去改变纹理的颜色值。

  • Out
    输出数据是作为一个阶段着色器的输出定义的,而后续阶段的着色器则作为输入定义。
    1、输出数据可以简单的从一个阶段传递到下一个阶段,也可以用不同的方式插入。客户端的代码接触不到这些内部变量,通常我们的OpenGL开发接触不到。

以上就是OpenGL渲染架构的解析啦。

本文部分内容参考CC老师的简书:https://www.jianshu.com/p/36413e468bfe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25179.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GacUI:跨平台和渲染器

GacUI:跨平台和渲染器 https://github.com/vczh/GacUIBlog UI库跨平台的方法无非就是每个平台写一次。而如何把更多的共同点抽取出来,尽量的减少每个平台写一次的部分,是每一个跨平台的UI库的重点之一。GacUI的设计比较直接,所有…

Unity3D 《拥挤城市》3D房子建筑透视效果实

3D游戏,经常会看到透视效果,例如《王者荣耀》草丛透视,《拥挤城市》建筑透视。 实现原理:把3D模型MeshRenderer中Materials替换成透明材质球。 举例:《拥挤城市》3D房子建筑透视效果实现,效果如下图&…

Unity2020高清渲染管线

一、高清渲染管线加载与环境配置 这里使用2019.3.0f6版本 1、加载高清渲染管线(High Definition RP) 2、创建高清管线脚本文件 3、配置高清渲染管线环境(把色彩空间改为线性空间) 4、把高清渲染管线脚本添加到图形(G…

Unity Xlua热更新框架(一):概述与效果演示

1. 资源目录划分 资源:热更新资源和热更新步骤(Bundle),,,,资源需要打成Bundle包,通过不重新安装安装包的情况,去更新和替换资源代码:Lua与C#的交…

Unity3D教程:实现房产项目中的材质动态切换

在许多典型的房产展示项目当中,经常需要动态地实现例如墙纸、地板等材质的更换以获得不同的展示效果,下面将通过一个简单的教程介绍实现这一功能的关键技术。 首先需要场景中创建一个简易的样品房,样品房里面有一个地面和两面相互垂直的墙壁…

【GAMES-104现代游戏引擎】4、引擎渲染基础(渲染基础数据、全局光照、PBR、阴影)

Lecture04~05 1、光栅化流程2、一丢丢显卡知识3、网格绘制组件(Mesh Render Component)4、材质5、资源池(Resource Pool)6、Cluster-Based Mesh Pipeline7、渲染 游戏渲染的挑战 一个场景包含成千上万的GO需要的材质、shader、效果…

重回游戏公平,向游戏打金工作室宣战!

什么是打金工作室? 近几年中国游戏市场持续发展,国产自研精品游戏层出不穷,游戏产业精品化、高质量健康发展趋势稳定。根据中国音数协游戏工委(GPC)与中国游戏产业研究院发布的《2022年中国游戏产业报告》显示&#xf…

GPT-4 API平替?性能媲美同时成本降低98%,斯坦福提出FrugalGPT,研究却惹争议

来自:机器之心 进NLP群—>加入NLP交流群 Game Changer 还是标题党? 随着大型语言模型(LLM)的发展,人工智能正处于变革的爆发期。众所周知,LLM 可用于商业、科学和金融等应用,因而越来越多的公…

FrugalGPT

随着大型语言模型(LLM)的发展,人工智能正处于变革的爆发期。众所周知,LLM 可用于商业、科学和金融等应用,因而越来越多的公司(OpenAI、AI21、CoHere 等)都在提供 LLM 作为基础服务。虽然像 GPT-…

使用chatGPT生成一个带圆角的Container

我在项目中是想实现如图带圆角的Container,使用chatGPT生成步骤如下。 首先,生成渐变色的Container 生成的Container代码如下: Container(margin: EdgeInsets.fromLTRB(30, 0, 30, 0),height: 200.0,width: double.infinity,decoration: BoxD…

ChatGPT-4 如何改变 AI 市场及其对未来的影响?GPT版本及其差异

GPT-1 对比 GPT-2 对比 GPT-3。Chat GPT (Generative Pre-trained Transformer) 是一种高级自然语言处理模型,它使用机器学习算法来生成看起来像人类所写的文本。GPT模型的发展彻底改变了人工智能领域,特别是在语言处理领域。 多年来,已经发布了多个版本的 GPT 模型,每个版…

AI新风向标PaLm2?能否取代ChatGPT成为AI领域的老大

AI新风向标PaLm2? ​ 前几天Google发布了,PaLM2作为Google的下一代大型语言模型,它会取代ChatGPT成为更智能的AI工具吗? 关于PaLM2 ​ PaLM 2是Google的下一代大型语言模型,它建立在谷歌在机器学习和负责任的人工智能方面的突破…

部落冲突外挂

有人玩部落冲突吗,我这里有挂,加我qq3083413274,我给你。

最新最全文献下载网站:文献部落——一站式查找、下载文献!

来喽来喽! 小编带着新鲜出炉的“文献部落”来喽!同样是文献下载,凭啥只有他值得我推荐?还不是因为好用?!你以为只有SCI吗?太天真了!你往下看↓↓↓ 文献部落:http://459…

外文文献检索网站

1. Google scholar 网址: https://scholar.google.com.hk/?hlzh-CN 如今搜索论文的首选,可以在这里查看论文统计和引用参考文献,还能通过关注作者或者论文获得新论文更新提醒,以及利用自动化推荐来提供一个基本库 2. DBLP 网址…

COC部落冲突自动找鱼 python脚本

众所周知,最近COC被腾讯收购了,又整了一波活,花里胡哨的兵种都不认识了,这件事我不做评价吧。 图个新鲜感,高中几个哥们突然又玩起了部落冲突,打🐟一时爽,一直打🐟一直爽…

代码故事:汉德的救赎

我叫汉德(Handle),是一段程序代码,出生在日食之城埃地特(Editor)。 我诞生于伟大而荣耀的瑟维斯家族(Service),我们家族的格言是:“瑟维斯永不倒下。(Services never crash down.)”。 信仰 我们家族的信仰,哦,不对,应该是所有代码家族的信仰都是普瑞格兰姆神…

coc部落冲突脚本辅助工具,小曦coc,PHP随机数生成代码

什么是脚本? (1)脚本就是剧本 (2)脚本是普通的文本文件,是批处理文件 (3)脚本导演了一个序列事件的发生 (4)脚本让一个例行任务效率大幅提升 游戏脚本基本只…

英文文献调研方法综述

文章目录 1. 进行英文文献调研的理由2. 文献调研的纲要2.1. 文献调研的目的2.2. 文献调研的原则2.3. 文献调研的步骤 3. 常用的搜索平台及数据库3.1. 文献搜索平台3.1.1. Text Analyzer3.1.2. Web of Science3.1.3. Google Scholar3.1.4. CORE & DOAJ3.1.5. ProQuest 3.2. …

不用校园网如何下载论文文献|DOI号|文献免费下载

不用校园网如何下载论文文献|DOI号|文献免费下载 研究生人员在学校里避免不了要下载文献,有些文章,如果学校没有购买数据库,还要付费下载,挺鸡肋的,这里,我整理了一些自己收藏的网站…