一张图了解OpenGL的渲染架构

2019-05-27  本文已影响0人  夜里昙花现

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

OpenGL的渲染架构.png

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

一、Client与Server

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

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

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

二、Shader

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

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

三、Texture Data,Uniforms,Attributes

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

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

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读