GLSL着色语言的学习(一)渲染管线流程

原创 2015年11月21日 20:40:55

先看一个shader模拟海岸面的例子。。。
四不四很强大,而且都是依靠强大的数学计算来完成,好吧,数学真的很重要。。。。

打好基础更重要。。。。

1.首先了解渲染管线,就是一系列数据处理流程。

在OpenGL中,会用到不同的四种不同的着色阶段,其中最常用的就是顶点着色器和片源着色器,前者处理顶点数据,后者处理光栅化的片元数据。下面来详细解释每一步。


(1)首先接受用户传进来的数据(vertex Array或Buffer objects)

(2)顶点着色器(常用的三个修饰符attribute、uniform、varying)


顶点着色器的输入

attribute:
传递属性值到vertex shader,如:空间位置,法向量,顶点,颜色,纹理坐标。
只读,并且只能修饰float,vec2,vec3,vec4,mat2,mat3,mat4,不能声明数组或结构体。并且,属性只在顶点着色器才有,片元没有。

uniforms:
修饰的是全局变量,一般表示变换矩阵,材质,光照参数,颜色。
只读,因为顶点着色器和片渊着色器可共享同一个uniform块,因此在两个着色器中,uniform声明要一致。

顶点着色器的输出
varying:
顶点着色器计算每个顶点的值(颜色,纹理坐标等)写入varying变量,然后片元着色器使用该值,因此varying在顶点着色器可写,在片元着色器只读。作为顶点着色器和片元着色器之间传递插值数据,因此也声明一致。

下面是vertex的一段代码

position是三维,我们变成齐次坐标:vec4(position,1.0),齐次坐标用4个分量来表示空间中的点,实现了平移,旋转,缩放的统一(在后续数学回忆章节再讲这一伟大发明),也用来区分点(x,y,z,1)和向量(x,y,z,0)。下面我们讲一下projectionMatrix*viewMatrix*modelMatrix*vec4(position,1.0)。。。。
点的坐标vec4左乘模型矩阵modelMatrix,指的是点在空间中的位置变化,包括平移、旋转、缩放。现在我们得到的是空间中的点经过一系列变换在世界坐标系中的位置。。。。。
然后左乘视图矩阵viewMatrix,就是将观察者至于原点的一个变换。有时视图矩阵经常和模型矩阵放到一起,叫模型视图矩阵,modelViewMatrix。。。。
最后左乘投影矩阵projectionMatrix,将这些顶点坐标映射到二维屏幕上。。。。。

(3)几何着色器

几何着色器位于顶点着色和片元着色之间,根据顶点信息批量处理几何图形,因此几何着色器输入变量都是数组类型。(还有一种细分着色器,是在顶点着色器处理每个顶点的关联数据之后,进一步描述一个物体的形状,结果就是几何图元的数量增加,并且模型的外观会变得更为平顺。在这里值着重介绍顶点着色器和片元着色器)

(4)图元装配

前面着色阶段处理的都是顶点数据,那么这些顶点是如何构成几何的信息也会被传递到OpenGL,图元装配就是将这些顶点与相关的几何图元之间组织起来,将一堆顶点数据根据原始链接关系还原出网络结构,然后准备下一步的裁剪和光栅化。

(5)裁剪

顶点可能会落在我们绘制的窗口之外,要把它和相关的图元剪切。

(6)光栅化

剪切之后马上要执行的工作就是光栅化,就是将更新后的图元传递到光栅化单元,生成对应的片元。
比如找出三角形所覆盖的像素,这时候完成坐标(10.48,20.51)——>(10,20)像素位置的转化。

(7)片元着色器


前面讲顶点着色器的输出varying,varying变量在光栅化阶段被线性插值计算后,在片元着色器作为输入。。。
samplers:一种特殊的uniform,用于呈现纹理。。。。
下面是片元着色器的代码,计算顶点法向量vNormal和入射光方向两个向量的点积,计算得到的diffuse就是点光源的强度


到现在,大概的流程讲完了,
这都是看资料和书自己总结的,如果有硬伤,小伙伴一定要指出来哇~~(*@ο@*) ~







接下来我会总结下数学知识,矩阵变换、四元数、欧拉角,,,,还有GLSL中常用的数学函数

相关文章推荐

Unity3D最新面试高频问答题目

http://blog.csdn.net/yaokang522/article/details/46415267 最先执行的方法是: 1、(激活时的初始化代码)Awake,2、Start、3、Up...

计算机图形学知识点复习总结

计算机图形学知识点复习总结 在计算机体系结构中,管线定义为数据序列并用于处理元素。渲染管线主要由以下阶段构成,即顶点处理、光栅化过程、片元处理过程以及输出合并操作。 1、顶点处理 常...

GPU渲染管线的组成,以及可编程着色的进化史,顶点、几何、像素三种可编程着色器。

本文由@浅墨_毛星云 出品,转载请注明出处。   文章链接: http://blog.csdn.net/poem_qianmo/article/details/71978861 ...

[OpenGL ES 02]OpenGL ES渲染管线与着色器

前言 在前文《[OpenGL ES 01]iOS上OpenGL ES之初体验》中我们学习了如何在 iOS 平台上设置OpenGL ES 环境,主要是设置 CAEAGLLayer 属性,创建 EA...

【《Real-Time Rendering 3rd》 提炼总结】(三) 第三章 GPU渲染管线与可编程着色器

本文由@浅墨_毛星云 出品,转载请注明出处。   文章链接: http://blog.csdn.net/poem_qianmo/article/details/71978861这篇文章是解...

OpenGL ES渲染管线与着色器

OpenGL ES渲染管线与着色器前言在前文《[OpenGL ES 01]OpenGL ES之初体验》中我们学习了如何在 iOS 平台上设置OpenGL ES 环境,主要是设置 CAEAGLLayer...

【《Real-Time Rendering 3rd》 提炼总结】(三) 第三章 · GPU渲染管线与可编程着色器 The Graphics Processing Unit

这篇文章是解析计算机图形学界“九阴真经总纲”一般存在的《Real-TimeRendering 3rd》系列文章的第三篇。将带来RTR3第三章内容“Chapter 3 The Graphics Proc...
  • zhmxy555
  • zhmxy555
  • 2017年05月14日 15:26
  • 15384

iOS之OpenGL ES【2】:渲染管线和着色器

OpenGL ES的着色器主要有片元着色器和顶点着色器,其使用方法简单的介绍如下:...

Surface Shader(可编程渲染管线 表面着色器)

1、Unity 3d官方文档上对WorldNormalVector的解释 float3 worldNormal; INTERNAL_DATA -will contain world normal v...

传统渲染管线与可编程Shader着色器

传统渲染管线与可编程Shader着色器   1.GUP的问世      上世纪的绝大多数显示加速芯片都不能称之为完整意义上的GPU,因为它们仅仅只有像素填充和纹理贴图的基本功能。而NVIDIA公司在1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GLSL着色语言的学习(一)渲染管线流程
举报原因:
原因补充:

(最多只允许输入30个字)