固定渲染管线与可编程渲染管线

转载 2013年12月03日 17:40:33
1.固定渲染管线与可编程渲染管线的区别:
  1)、固定渲染管线 ——这是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界、视、投影变换及固定光照控制和纹理混合。T&L管线可以被渲染状态控制,矩阵,光照和采制参数。
  2)、顶点着色器——图形开发人员可以对渲染管线中的顶点运算和像素运算分别进行编程处理了,而无须象以前那样套用一些固定函数,取代设置参数来控制管线,最早出现与DX8,包括PS和VS两部分。

2.为了解决D3D或者OpenGL对不同硬件厂商的支持,解决移植性的问题,可以通过将加速卡功能抽象出来,统一定义接口的形式来实现。于是,人们采用了典型的分层模式(参阅:设计模式),将一套应用程序分为3个层次:
  应用程序层 -> 硬件抽象层 -> 硬件层其中
      应用层就是游戏和应用软件开发人员的开发主体,他们调用统一的加速卡API来进行上层开发,而不用考虑移植性问题;
      硬件抽象层则抽象出硬件的加速功能,进行有利于应用层开发的封装,并向应用层开放API;
      硬件层将硬件驱动提供给抽象层,以实现抽象层加速功能的有效性。
  这个结构有效的将游戏和应用程序 与硬件加速卡隔离开,这就很好的提升了程序的移植能力。并且,还有一个好处就是,开发
  人员的知识复用率得到提高,从而降低了这类软件的开发门槛。

3.3D加速卡的主要功能就是协助CPU,负责将内存中的矢量图像数据(顶点集合)进行变换、光照计算、裁剪等操作,最后经过光栅化将图像呈现给人眼。这个过程就叫做渲染
  D3D把整个渲染分为9个步骤,9个步骤的组合,就叫做流水线,或者叫 管线 (参阅 设计模式 之流水线模式)。
  D3D的渲染管线(Rendering Pipeline):局部坐标变换 -> 世界坐标变换 ->观察坐标变换->背面消除->光照->裁剪->投影->视口计算->光栅化。
  无论是固定渲染管线还是可编程管线,都需要经过这九个步骤:
  可编程管线,顾名思义,就是说管线中的某些环节是可以被控制的。人们可以通过对GPU中的着色器进行编程的方式,来控制、管理加速卡的渲染效果。
  着色器分为顶点着色器和像素着色器。
      顶点着色器是在进行坐标变换和光照计算时工作
      像素着色器是在光栅化环节工作。
  人们对着色器进行自定义编程时,这个流水线就叫做可编程管线。同时,D3D还提供默认的着色器程序,当游戏或应用程序完全使用默认着色器程序时,这个流水线就叫做固定管线。

4.变换步骤:
  在固定管线中,变换分成2个步骤:
      局部坐标系到世界坐标系 和世界坐标系到观察坐标系。
          局部坐标系:就是建模坐标系,它是在建模时由3DMAX之类的工具定义的
          世界坐标系:用来统一场景中各个object的位置、尺寸等规格
          观察坐标系:也就是摄像机的坐标系。
      局部坐标系到世界坐标系变换:
          这个变换是为了把在不同建模工具或者有用不同规格的建模尺寸下设计的模型,都统一到一个通用的坐标系下面。这个动作的作用,就像秦始皇统一度量衡一样。从局部坐标系到世界坐标系这个变换的动作,通常是在游戏设计时,由游戏工具(如:场景编辑器)来预先计算,并且为每个模型都计算出一个变换矩阵(即记录模型在游戏场景中的大小、朝向、位置),叫做世界坐标变换矩阵。在渲染时,实时的应用这些矩阵来参与运算写法:
          D3DXMATRIX worldMatrix; //这个矩阵就从文件中读进来
          Device->SetTransform(D3DTS_WORLD, &worldMatrix); 注意,使用宏 D3DTS_WORLD
      从世界坐标系到观察坐标系变换:
          这个变换动作,实际上是为了简化运算而做的。这样变换之后,所有的顶点也就可以直接转换为向量,非常的便于某些计算。这个动作通常是,将摄像机平移到世界坐标系原点,再旋转摄像师,使它的光轴与世界坐标系z轴方向一致。与此同时,空间中的所有几何体都要随摄像机一同变换,以确保摄像机的视场不变。这个变换叫取景变换,变换后得到观察坐标系。写法如下:
          D3DXMATRIX ViewMatrix; D3DXVECTOR3 position, targetPoint, worldUp;
          D3DXMatrixLookAtLH(&ViewMatrix, //[OUT], 计算出的变换矩阵 &position, //摄像机位置 &targetPoint, //摄像机的观察朝向 &worldUp);//摄像机的y朝向,也就是头的朝向
          Device->SetTransform(D3DTS_VIEW, &ViewMatrix); 注意宏,D3DTS_VIEW
      其实,D3DXMatrixLookAtLH()函数只是类似功能函数中的一个,注意后缀 LH 这表示左手坐标系,对应的还有一个右手坐标系,它们的区别在于:左手系 其z轴向里为正;右手系向外为正。
 
上文来自:http://blog.sina.com.cn/s/blog_6b4aa9ed0100mayg.html
相关参考:
OPENGL固定图形渲染管线操作细节
http://blog.csdn.net/lovivid/article/details/1613897
       

相关文章推荐

可编程图形渲染管线

着色程序分为两类:vertex shader program(顶点着色程序)和fragment shader program(片断着色程序)。为了清楚的解释顶点着色和片断着色的含义,我们首先从阐述GP...

opengl从固定渲染管线到可编程渲染管线

这是一些列来自lighthouse3d的GLSL教程,非常适合入门。我将边学习边翻译该教程的内容,同时记录在这里,方便以后查询。 流水线概述 下图描述了一个简化的图形处理流水线,虽然简...

OpenGLES2.0着色器语言glsl

OpenGLES2.0中是强制使用可编程的渲染管线的,使用的是glsl着色器语言,因为着色器语言是使用的GPU,即图形处理单元,而不是CPU,这样可以使CPU从繁重的几何计算和像素的处理中解脱出来了。...

GLSL实现多重纹理映射(例子取自glsl橙皮书第10章)

我们使用GLSL来模拟从太空角度来观测地球,该例子取自GLSL橙色书第10章。我们可以直接使用一副从太空拍摄的地球纹理贴图来实现地球的模拟,但是这样做会有一些“不真实”的地方:(1)我们知道地球上是有...
  • mike_zw
  • mike_zw
  • 2010年11月17日 17:31
  • 5024

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

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

【《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
  • 15199

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

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

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

传统渲染管线与可编程Shader着色器   1.GUP的问世      上世纪的绝大多数显示加速芯片都不能称之为完整意义上的GPU,因为它们仅仅只有像素填充和纹理贴图的基本功能。而NVIDIA公司在1...

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

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

将Shader嵌入Ogre(固定渲染管线到可编程渲染管线)

引言:一般的,ogre是使用固定渲染管线,嵌入可编程管线,可借助GPU,提供更多更丰富的效果。//-----------------使用脚本加入shader(.material或者.programe使...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:固定渲染管线与可编程渲染管线
举报原因:
原因补充:

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