固定渲染管线与可编程渲染管线的区别

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轴向里为正;右手系向外为正。

D3DXMatrixLookAtLH()函数解析: The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixLookAtLH function can be used as a parameter for another function. This function uses the following formula to compute the returned matrix. zaxis = normal(At - Eye) xaxis = normal(cross(Up, zaxis)) yaxis = cross(zaxis, xaxis) xaxis.x yaxis.x zaxis.x 0 xaxis.y yaxis.y zaxis.y 0 xaxis.z yaxis.z zaxis.z 0 -dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) l 5.

时间: 2024-10-28 22:09:50

固定渲染管线与可编程渲染管线的区别的相关文章

(转)固定渲染管线与可编程渲染管线

1.固定渲染管线与可编程渲染管线的区别: 1).固定渲染管线 ——这是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界.视.投影变换及固定光照控制和纹理混合.T&L管线可以被渲染状态控制,矩阵,光照和采制参数. 2).顶点着色器——图形开发人员可以对渲染管线中的顶点运算和像素运算分别进行编程处理了,而无须象以前那样套用一些固定函数,取代设置参数来控制管线,最早出现与DX8,包括PS和VS两部分. 2.为了解决D3D或者OpenGL对不同硬件厂商的支持,解决移植性的问题,可

计算机图形学学习(3)—— 基础篇:可编程渲染管线

3.1 渲染管线的发展历程 图形编程的发展 早期的图形编程:调用硬件供货商提供的函数库(用来绘制图元及其属性的函数库不存在) 图形标准的产生:硬件供货商提供标准图形数据库,使得能够在设备无关的方式下生成图像 GKS(Graphical Kernel System, 图形核心系统) PHISS(Programmer's Hierarchical Interactive Graphics System, 程序员层次式交互图形系统) OpenGL 固定管线 图形API提供了一个对硬件进行操作的标准接口

Win32中GDI+应用(五)--GDI与GDI+编程模型的区别

在GDI里面,你要想开始自己的绘图工作,必须先获取一个device context handle,然后把这个handle作为绘图复方法的一个参数,才能完成任务.同时,device context handle是同一定的绘图属性绑定在一起的,诸如画笔.话刷等等,你必须在画线之前创建自己的画笔,然后使用selectObject方法把这个画笔同已经获取的device context handle绑定,才能使用LineTo等方法开始画线.不然,你画出来的线使用的是默认的属性:宽度(1),颜色(黑色).但

TCP与UDP在socket编程中的区别 (网络收集转载)

http://blog.chinaunix.net/uid-26421509-id-3814684.html 一.TCP与UDP的区别 基于连接与无连接  对系统资源的要求(TCP较多,UDP少)  UDP程序结构较简单  流模式与数据报模式  TCP保证数据正确性,UDP可能丢包  TCP保证数据顺序,UDP不保证  部分满足以下几点要求时,应该采用UDP 面向数据报方式 网络数据大多为短消息  拥有大量Client  对数据安全性无特殊要求  网络负担非常重,但对响应速度要求高  具体编程时

TCP与UDP在socket编程中的区别

一.TCP与UDP的区别 基于连接与无连接  对系统资源的要求(TCP较多,UDP少)  UDP程序结构较简单  流模式与数据报模式  TCP保证数据正确性,UDP可能丢包  TCP保证数据顺序,UDP不保证  部分满足以下几点要求时,应该采用UDP 面向数据报方式 网络数据大多为短消息  拥有大量Client  对数据安全性无特殊要求  网络负担非常重,但对响应速度要求高  具体编程时的区别 socket()的参数不同  UDP Server不需要调用listen和accept  UDP收发数

OpenGLES 2.0 可编程渲染管线

OpenGL ES 2.0 与 OpenGL ES 1.x 渲染管线的最大区别就是: 顶点着色器.片元着色器是可编程的,替代了原来的固定管线的很多功能.

GPU渲染管线与可编程着色器

本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/71978861 这篇文章是解析计算机图形学界"九阴真经总纲"一般存在的<Real-Time Rendering 3rd>系列文章的第三篇.将带来RTR3第三章内容"Chapter 3 The Graphics Processing Unit 图形处理器"的总结.概括与提炼. 这章的主要内容是介绍G

d3d11 游戏编程 渲染管线

1.input Assembler(IA) Stage IA Stage阶段的主要任务是从内存中读取顶点和索引数据,并且把这些顶点和索引数据组装成集合图元. 顶点的组装格式通过指定顶点的图元拓扑(Primitive Topology)来决定.Primitive Topology主要有以下几种:Point List.Line Strip.Line List.Triangle List.Triangle Strip.primitives with adjaceny.Control Point Pat

Set、List、Map的在编程时的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型.推荐学习尚硅谷·Java基础视频教程. JAVA集合主要分为三种类型: 1.Set(集) 2.List(列表) 3.Map(映射) Collection 接口 :