OpenGL

003---OpenGL渲染

2020-07-16  本文已影响0人  清风烈酒2157

[toc]

OpenGL渲染管线

也可以说基础图形管线

image.png

ClientServer

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

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

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

Shader

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

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

Texture Data,Uniforms,Attributes

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

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

1、Attributes常为需要改变的数据,比如:颜色数据顶点数据纹理坐标光照法线

2、可以直接传递到顶点着色器,间接传递到片元着色器不能为了将属性直接传递到片元着色器而通过uniform传递到片元着色器

3、属性值可以是浮点数、整数、布尔数据。

1、Uniforms值是比较统一的,不需要发生太多改变;

2、可以直接传递到顶点着色器和片元着色器

3、uniforms可以是浮点数、整数、布尔数据。

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

Texture Data(纹理数据)

顶点着色器片段着色器中都可以对纹理数据进行采样和筛选。通常来说,片段着色器对一个纹理值进行采样,然后在一个三角形表面应用渲染纹理数据。然而,纹理数据,不仅仅表现在图形,很多时候,图形文件格式都是以无符号字节(每个颜色通道8位)形式对颜色分量进行存储的。常用的有颜色填充纹理填充
什么时候会用到纹理呢?比如滤镜滤镜实际上是对图片本身做处理的,它是在读取的时候,去改变纹理的颜色值

Out

输出数据是作为一个阶段着色器的输出定义的,而后续阶段的着色器则作为输入定义。

输出数据可以简单的从一个阶段传递到下一个阶段,也可以用不同的方式插入。客户端的代码接触不到这些内部变量,通常我们的OpenGL开发接触不到。

上一篇 下一篇

猜你喜欢

热点阅读