频道栏目
读书频道 > 软件开发 > C# > 精通C#游戏编程
2.1.2 流水线
2012-08-01 15:58:17     我来说两句
收藏   我要投稿

本文所属图书 > 精通C#游戏编程

本书通过引导读者创建一个基本的游戏,展示了如何使用c#和OpenGL一步步地开发出简单、整洁而可靠的代码。C#是一种高级编程语言,而OpenGL是业界显示图形最常用的方法。本书概述了创建优秀游戏项目时采用的方法和...  立即去当当网订购

流水线的流程如图2-3所示。这个流水线叫做固定功能流水线(fixed function pipeline)。当程序员为这种流水线提供输入后,所有的功能已被固定,无法修改。例如,在像素处理阶段很容易向屏幕上添加蓝色调,但是在固定功能流水线中,程序员无法直接控制这个阶段。

 

固定功能流水线包含6个主要的阶段。这些阶段几乎都可以并行应用。如果硬件支持的话,每个顶点可以同时经过同一个阶段。由于这个原因,图形卡的处理速度比CPU的处理速度要快得多。

● 输入阶段。输入以顶点的形式给出,顶点的属性包括位置、颜色和纹理数据。

● 变换和光照。根据当前视图变换顶点。这包括将顶点的位置由3D空间(也叫做世界空间)改为2D空间(也叫做屏幕空间)。如果有些顶点对最终的显示没有影响,可以在这个阶段移除它们。在这个阶段也可以对每个顶点执行光照计算。

● 创建图元。这是使用顶点信息创建多边形的过程,需要根据OpenGL的状态把顶点连接到一起。游戏经常使用三角形或者三角带作为图元。

● 光栅化。这是将多边形转换为像素(也叫做片段)的过程。

● 像素处理。像素处理也叫做片段处理。这个阶段将测试像素,以确定是否把它们绘制到帧缓冲区中。

● 帧缓冲区。帧缓冲区是一块内存,代表特定的帧将显示在屏幕上的部分。混合设置将决定像素如何与已经绘制的部分进行混合。

在过去的几年中,已经可以使用程序控制流水线了。将程序上传到图形卡以后,它们将替换固定功能流水线的默认阶段。重写流水线的特定部分的小程序叫做着色器(shader)。

图2-4显示了可编程流水线的阶段。这里删除了变换和光照阶段,添加了顶点和几何着色器。像素处理阶段也可以像像素着色器那样进行编程。通过流水线的每个像素都会被应用像素着色器。像素着色器不能添加顶点,但是可以修改位置、颜色和纹理位置等属性。

\


与像素着色器和顶点着色器相比,几何着色器加入的时间较晚。几何着色器以一个完整的图元(如线、点或三角形组成的带)作为输入,而顶点着色器针对每个图元都会运行。几何着色器可以创建新的顶点信息、点、线,甚至图元。几何着色器还可用于创建点精灵和动态镶嵌,以及实现其他一些效果。点精灵可以快速渲染大量精灵,这种技术经常用于粒子系统,可创建类似于火焰或者烟雾效果。动态镶嵌可以在几何形状中添加更多的多边形。这种技术可以用来增加包含多边形数较少的游戏模型的平滑度,并在摄像机放大模型时展现更多的细节。

像素着色器会应用到被发送到帧缓冲区的每个像素。像素着色器用于创建凹凸贴图效果、镜面高光和逐像素光照。凹凸贴图效果可以给表面增加额外的高度信息。凹凸贴图通常包含一个图片,其中每个像素代表一个标准的法向量,该法向量描述了如何扭曲表面。像素着色器可以使用凹凸贴图来为模型提供一个更有趣的纹理,使其看上去有一定的深度感。逐像素光照用于替换OpenGL的默认的光照公式。OpenGL的光照公式可计算出每个顶点的光照,然后为该顶点提供一种合适的颜色。逐像素光照使用更精确的光照模型,为每个像素单独应用光照。镜面高光是模型中非常亮、反射大量光的区域。


您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.1.1 顶点:3D图形的基础
下一篇:2.2 变化中的OpenGL
相关文章
图文推荐
排行
热门
最新书评
文章
下载
读书
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站