GPU图形处理管线、图形硬件接口(OpenGL)与可编程图形渲染语言(CG)的关系

GPU图形处理管线、图形硬件接口(OpenGL)与可编程图形渲染语言(CG)的关系

1. 现代的硬件设备已经可以使的所有的图形操作在硬件上进行,在图形渲染管线上的操作都是由GPU来完成的,除非在程序中显示调用的那些数学计算之外(这是在CPU上的),所以默认的写的所有图形渲染程序都是由硬件加速的。GPU的图形处理管线如下:


 

2. 所有的图形硬件接口,如OpenGL和D3D都提供了程序员访问图形硬件的接口,用他们编写的程序是不可硬件编程的,因为他们采用的是他们提供的固定渲染管线,即根据用户提供的各种绘制数据与渲染参数,用固定顺序固定规则的渲染管线来提交给硬件渲染,当然这些提交给硬件的操作也是在GPU上进行的,用他们进行图形渲染也由一套处理管线(虽然是固定套路的),这个管线是与GPU的图形处理管线相符的,OPENGL的如下:

   这里面有顶点数据和像素数据两条通路,顶点数据即我们常说的三维图形数据,下面的则是二维图像数据,通路稍微简单。OPENGL只是定义了这个阶段所有的操作,具体的操作还是传给图形硬件做的,其中的per-vertexoperation属于图形硬件的顶点操作,是在顶点处理器里完成的,里面包括了model-view矩阵的操作,以及纹理坐标,光照等计算,而primtive assembly则包括了projection矩阵操作以及viewport变换,所以整个模块执行了图形学里顶点变换的内容,并且进行了纹理光照的内容。(具体每个模块的功能还可以参考OPENGL红宝书),这部分可以程序员自己编程,per-fragment也是,不采用可编程语言的则采用OPENGL固定的管线和处理方式。在per-vertex operation和per-fragment operation中有很多操作,可以在进行顶点和片断编程时自己进行设置。
3. 对于现代的图形硬件来说,可以支持顶点可编程和片断可编程,虽然这些图形硬件接口(OpenGL)们已经在内部实现来这样的接口,但是他们的渲染管线是固定号来的,程序员无法自由随意的使用硬件的两个处理器,所以就有了可编程图形渲染语言,例如CG,选择用可编程的图形渲染语言,就意味着不采用OPENGL等提供的默认的固定的渲染管线,而是自己指定在两个可编程处理器上的操作,这就是可编程图形渲染的意义

4. 可编程图形渲染语言与图形硬件接口的区别,首先他们在效率上,他们的渲染管线都是在GPU上的,只不过后者的管线已经确定,而前者在两个处理器上的操作可以自己设定。但是可编程语言它只是一个运行在GPU的两个处理器上的脚本,而不是一个独立的程序,所以它要依赖于图形硬件接口,也就是在典型的CG程序中,基本就是在OPENGL的程序中加上两个小的脚本语言,也就是说大部分的管线上的其他操作需要用图形硬件接口进行访问,但是到了两个处理器到地方就需要用CG语言了。这是二者到依存关系。使用编程渲染语言到好处有,可以自由设定GPU处理器上到操作,可以把更多的在COU上的计算也转移到GPU上,提高效率,加速硬件,有些操作是OPENGL等他们固定等渲染管线上是没有的也没有办法提供的,这些操作用CG语言等可能就会很容易并高效等执行。说到底,二者都运行于当前都图形硬件上,并且遵从硬件的渲染管线,可不可编程在于当管线走到顶点处理器于片断处理器时时采用固定默认的线路(图形硬件接口)还是程序员指定的操作(可编程图形渲染语言)。

你可能感兴趣的:(GPU图形处理管线、图形硬件接口(OpenGL)与可编程图形渲染语言(CG)的关系)