OpenGL 简 介(3)

 

DirectX和OpenGL都是非常优秀的图形库。DirectX工作在Microsoft平台上,而OpenGL可以应用到更加广泛的平台上。DirectX更新得更快,意味着它可以利用最新的图形功能。OpenGL的更新较慢,最新的图形功能只能通过一个不太方便的扩展机制使用。OpenGL这种缓慢的更新有一个明显的好处,即接口很少发生改变,所以多年前编写的代码仍然可以使用最新的OpenGL版本。DirectX的每个新版本都会改变接口,所以无法维持兼容性,必须调整和修改较老的代码才能使它们利用DirectX的新版本。

通过Managed DirectX库,可以在C#中使用DirectX,但遗憾的是,官方不再支持或更新这些库。Managed DirectX已经被Microsoft的XNA游戏创建库替代。XNA使用DirectX,但它是一个更高层的框架,用于快速创建游戏原型和开发游戏。SlimDX是一个针对DirectX开发的独立的C# API,可以作为Managed Directx的一个不错的替代品。

2.1  OpenGL的架构

OpenGL是一个C风格的图形库。C风格是指OpenGL中没有类或对象,而只有大量的函数。OpenGL在内部就是一个状态机。函数调用会修改OpenGL的内部状态,这又会影响OpenGL的行为和在屏幕上渲染多边形的方式。OpenGL是状态机这个事实会带来一些问题,例如在代码中无意间修改了其他某个部分的状态,从而导致出现bug。因此,留意哪些状态发生改变十分重要。

2.1.1  顶点:3D图形的基础

OpenGL中的基本单元是顶点。简单来说,顶点就是空间中的一个点。在这些点上可以附加其他信息,如它如何映射到纹理,是否具有一定的重量或颜色等,但是最重要的信息是它的位置。

游戏会把大量的时间用于发送OpenGL顶点,或者告诉OpenGL以特定的方式移动顶点等。游戏可能首先告诉OpenGL它将要发送的全部顶点会构成三角形。此时,OpenGL将使用线把它收到的每三个顶点连接起来以创建一个多边形,然后可能还会使用纹理或颜色填充多边形的表面。

现代图形硬件非常擅长处理大量的顶点,把它们构成多边形,然后渲染到屏幕上。这个从顶点到屏幕的过程叫做流水线(pipeline)。流水线负责定位顶点和提供光照,以及进行投影变换。这个过程将把收到的3D数据变换为2D数据,以便将其显示到屏幕上。投影变换听起来有点复杂,但是几个世纪以来,画家和艺术家们一直在利用这种变换,在平展的画布上绘制出他们周围的世界。

就算现代的2D游戏也是使用顶点创建的。2D精灵(sprite)由两个三角形构成,这两个三角形形成了一个四边形(quad)。在给四边形提供纹理后,它就成为了精灵。2D游戏使用一种特殊的投影变换,忽略了顶点中的所有3D数据,因为2D游戏中并不需要这些数据。

2.1.2  流水线

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

读书导航