`

【转】【GLSL教程】(一)图形流水线

 
阅读更多

http://blog.csdn.net/racehorse/article/details/6593719

 

 

这是一些列来自lighthouse3d的GLSL教程,非常适合入门。我将边学习边翻译该教程的内容,同时记录在这里,方便以后查询。

 

流水线概述

下图描述了一个简化的图形处理流水线,虽然简略但仍然可以展示着色器编程(shader programming)的一些重要概念。

一个固定流水线包括如下功能:

顶点变换(Vertex Transformation)

这里一个顶点是一个信息集合,包括空间中的位置、顶点的颜色、法线、纹理坐标等。这一阶段的输入是独立的顶点信息,固定功能流水线在这一阶段通常进行如下工作:

·顶点位置变换

·为每个顶点计算光照

·纹理坐标的生成与变换

图元组合和光栅化(Primitive Assembly and Rasterization)

此阶段的输入是变换后的顶点和连接信息(connectivity information)。连接信息告诉流水线顶点如何组成图元(三角形、四边形等)。此阶段还负责视景体(view frustum)裁剪和背面剔除。

光栅化决定了片断(fragment),以及图元的像素位置。这里的片断是指一块数据,用来更新帧缓存(frame buffer)中特定位置的一个像素。一个片断除了包含颜色,还有法线和纹理坐标等属性,这些信息用来计算新的像素颜色值。

本阶段的输出包括:

·帧缓存中片断的位置

·在顶点变换阶段计算出的信息对每个片断的插值

这个阶段利用在顶点变换阶段算出的数据,结合连接信息计算出片断的数据。例如,每个顶点包含一个变换后的位置,当它们组成图元时,就可以用来计算图元的片断位置。另一个例子是使用颜色,如果多边形的每个顶点都有自己的颜色值,那么多边形内部片断的颜色值就是各个顶点颜色插值得到的。

片断纹理化和色彩化(Fragment Texturing and Coloring)

此阶段的输入是经过插值的片断信息。在前一阶段已经通过插值计算了纹理坐标和一个颜色值,这个颜色在本阶段可以用来和纹理元素进行组合。此外,这一阶段还可以进行雾化处理。通常最后的输出是片断的颜色值以及深度信息。

光栅操作(Raster Operations)

此阶段的输入:

·像素位置

·片断深度和颜色值

在这个阶段对片断进行一系列的测试,包括:

·剪切测试(scissor test)

·Alpha测试

·模版测试

·深度测试

如果测试成功,则根据当前的混合模式(blend mode)用片断信息来更新像素值。注意混合只能在此阶段进行,因为片断纹理化和颜色化阶段不能访问帧缓存。帧缓存只能在此阶段访问。

一幅图总结固定功能流水线(Visual Summary of the Fixed Functionality)

下图直观地总结了上述流水线的各个阶段:

取代固定的功能(Replacing Fixed Functionality)

现在的显卡允许程序员自己编程实现上述流水线中的两个阶段:

·顶点shader实现顶点变换阶段的功能

·片断shader替代片断纹理化和色彩化的功能

 

顶点处理器

顶点处理器用来运行顶点shader(着色程序)。顶点shader的输入是顶点数据,即位置、颜色、法线等。

下面的OpenGL程序发送数据到顶点处理器,每个顶点中包含一个颜色信息和一个位置信息。

 

[cpp] view plaincopy
 
  1. glBegin(...);  
  2.     glColor3f(0.2,0.4,0.6);  
  3.     glVertex3f(-1.0,1.0,2.0);  
  4.     glColor3f(0.2,0.4,0.8);  
  5.     glVertex3f(1.0,-1.0,2.0);  
  6. glEnd();  

一个顶点shader可以编写代码实现如下功能:

 

·使用模型视图矩阵以及投影矩阵进行顶点变换

·法线变换及归一化

·纹理坐标生成和变换

·逐顶点或逐像素光照计算

·颜色计算

不一定要完成上面的所有操作,例如你的程序可能不使用光照。但是,一旦你使用了顶点shader,顶点处理器的所有固定功能都将被替换。所以你不能只编写法线变换的shader而指望固定功能帮你完成纹理坐标生成。

从上一节已经知道,顶点处理器并不知道连接信息,因此这里不能执行拓扑信息有关的操作。比如顶点处理器不能进行背面剔除,它只是操作顶点而不是面。

顶点shader至少需要一个变量:gl_Position,通常要用模型视图矩阵以及投影矩阵进行变换。顶点处理器可以访问OpenGL状态,所以可以用来处理材质和光照。最新的设备还可以访问纹理。

 

片断处理器

片断处理器可以运行片断shader,这个单元可以进行如下操作:

·逐像素计算颜色和纹理坐标

·应用纹理

·雾化计算

·如果需要逐像素光照,可以用来计算法线

片断处理器的输入是顶点坐标、颜色、法线等计算插值得到的结果。在顶点shader中对每个顶点的属性值进行了计算,现在将对图元中的每个片断进行处理,因此需要插值的结果。

如同顶点处理器一样,当你编写片断shader后,所有固定功能将被取代,所以不能使用片断shader对片断材质化,同时用固定功能进行雾化。程序员必须编写程序实现需要的所有效果。

片断处理器只对每个片断独立进行操作,并不知道相邻片断的内容。类似顶点shader,我们必须访问OpenGL状态,才可能知道应用程序中设置的雾颜色等内容。

一个片断shader有两种输出:

·抛弃片断内容,什么也不输出

·计算片断的最终颜色gl_FragColor,当要渲染到多个目标时计算gl_FragData。

还可以写入深度信息,但上一阶段已经算过了,所以没有必要。

需要强调的是片断shader不能访问帧缓存,所以混合(blend)这样的操作只能发生在这之后。

分享到:
评论

相关推荐

    GLSL简介-learning glsl

    WebGL图形流水线(管线/PIPELINE) OpenGL 着色语言 着色语言概况 GLSL的基本语法 着色语言的应用 变换 纹理贴图 光照 混合与雾化 程序纹理着色器 动画着色器 图像处理着色器 开发着色器的注意事项

    Android openGL-GLSL_中文推荐.pdf

    GLSL用于定义和控制图形流水线的不同阶段,从而实现更精细的图形效果。 在Android中,使用OpenGL ES进行图形开发时,开发者需要理解图形流水线的概念。这是一个处理图形数据的过程,由多个阶段组成,每个阶段都对...

    OSG和GLSL结合的示例

    GLSL是OpenGL的标准着色语言,它允许开发者编写运行在GPU上的程序,以替代传统的固定功能流水线。GLSL分为顶点着色器、片段着色器等,分别处理模型的顶点变换和像素颜色计算。通过GLSL,开发者可以实现复杂的光照...

    GPGPU编程技术 从GLSL、CUDA到OpenCL-code

    - GLSL的语法较为简单,适合处理图形流水线中的任务,而CUDA和OpenCL提供更底层的控制,能执行更复杂的并行计算任务。 **GPGPU编程的关键概念** 1. **线程和线程块**: 在CUDA和OpenCL中,计算任务是通过线程和线程...

    opengl立体图形可以旋转

    在实际的项目中,你可能会使用现代的OpenGL编程范式,这意味着你将不再依赖固定函数流水线,而是使用顶点着色器和片段着色器等可编程阶段来处理变换。在顶点着色器中,你可以直接操作模型空间的顶点坐标,进行旋转和...

    OpenGL编程基础1

    OpenGL编程基础1主要介绍了计算机图形学中的一个重要工具——可编程图形流水线,这是计算机图形处理技术的一个重大进步。可编程流水线的概念允许开发者利用OpenGL着色语言(OpenGL Shading Language, GLSL)来定制图形...

    计算机图形学书籍.PRT计算机图形学书籍.prt计算机图形学书籍.prt计算机图形学书籍.prt计算机图形学书籍.prt

    2. 图形管线:解释OpenGL或DirectX的渲染流水线,包括顶点处理、光栅化和像素处理。 3. 几何建模:介绍不同类型的建模技术及其应用。 4. 图形编程:教授如何使用图形API编写代码来绘制和操作图形。 5. 光照与阴影:...

    计算机图形学源码,一个学期的心血

    6. **OpenGL编程**:这包括理解OpenGL的状态机概念,理解顶点、片段、几何、图元装配等渲染流水线,以及掌握GLSL(OpenGL Shading Language)来编写自定义的着色器。 7. **图形管线**:OpenGL的核心是图形管线,它...

    计算机图形学OpenGL

    7. **着色器**:理解现代OpenGL的核心——着色器语言GLSL,包括顶点着色器、片段着色器以及它们在图形流水线中的作用。 8. **状态机模型**:了解OpenGL的状态机机制,如何设置和查询图形状态。 9. **混合和Alpha...

    计算机图形学原理及算法教程

    - **图形管道**: GPU执行图形任务的流水线模型,分为顶点处理、几何处理和像素处理阶段。 以上只是计算机图形学的冰山一角,实际应用中还会涉及到更多高级技术,如全局光照、物理模拟、流体动力学、程序化生成等...

    计算机图形学 课件 都来下吧

    5. **图形流水线** - **OpenGL / DirectX**: 广泛使用的图形库,提供了从应用到硬件的图形处理接口。 - **顶点着色器**: 处理几何信息,如位置、颜色和法线。 - **片段着色器**: 处理像素级别的颜色和光照计算。 ...

    MIT计算机图形学资料

    2. **图形管线**:图形渲染的流水线过程,包括顶点处理、几何变换、裁剪、光照计算和光栅化等阶段。 3. **二维与三维几何**:学习如何表示和操作点、线、面、多边形等几何形状,以及进行平移、旋转、缩放等变换。 ...

    cpp-RenderDoc是一个独立的图形调试工具

    它的核心功能是通过帧捕获技术,记录并分析GPU执行的每一帧,帮助开发者深入理解图形流水线的工作过程,找出性能瓶颈和错误。以下是关于RenderDoc的详细知识点: 1. **帧捕获技术**:RenderDoc采用帧捕获方法来记录...

    OpenGL三维图形程序设计

    10. **固定管线与现代OpenGL**: 早期的OpenGL有固定的渲染流水线,但现在推荐使用可编程的着色器,这给予开发者更多的控制权。 学习OpenGL的过程中,可以借助"OpenGL三维图形程序设计.chm"这样的文档,它可能涵盖了...

    图形学课程教材&&哈工大计算机学院

    图形渲染管线(Graphics Pipeline)是图形处理的流水线模型,分为顶点处理、几何处理和像素处理三个阶段。学习者需要了解OpenGL或DirectX这样的图形库,它们提供了与图形管线交互的接口。 四、图形编程 学习图形学...

    02-GPU的概念及其发展.pdf

    1994年,PC显卡出现,而到了1999年,GPU的引入使得图形流水线被硬编码到专门的图形硬件上,显著提高了图形处理速度。从那时起,GPU的发展速度远超CPU,形成了独特的计算能力优势。 图形流水线是GPU的核心组成部分,...

    02-GPU的概念及其发展.pptx

    GPU,全称为Graphics Processing Unit,即图形处理器,是显卡中的关键芯片,专门负责处理屏幕显示相关的计算任务以及实现图形流水线。自1992年SGI发布OpenGL 1.0以来,图形流水线逐渐成为业界标准。早期,图形流水线...

    图形学学习资料计算机方面的

    9. **现代趋势**:现代图形学的研究热点包括实时光线追踪、机器学习辅助渲染、可编程流水线优化、GPU并行计算等。这些技术不断推动着图形学的进步,为我们带来更加逼真的视觉体验。 10. **学习资源**:学习图形学,...

    西南交通大学 计算机图形学 期末复习笔记.zip

    5. **图形渲染**:理解渲染流水线,包括图元装配、几何变换、裁剪、光栅化、像素操作等阶段。 6. **纹理映射**:学习如何将纹理应用到物体表面,包括纹理坐标、纹理坐标映射、纹理过滤、MIP贴图等技术。 7. **抗...

    GPU精粹1:实时图形编程的技术、技巧和技艺完整版

    书中会深入讲解顶点着色器、像素着色器、几何着色器等不同类型的着色器,以及它们在图形流水线中的作用。同时,还将讨论GLSL、HLSL等着色语言的使用。 五、高级GPU特性 随着GPU硬件的不断升级,更多的高级特性得以...

Global site tag (gtag.js) - Google Analytics