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

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-12-21 16:48:35

(转)固定渲染管线与可编程渲染管线的相关文章

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

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提供了一个对硬件进行操作的标准接口

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

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

OpenGLES 2.0 可编程渲染管线

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

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

渲染管线

2.1为什么要介绍渲染管线? ??在微软DirectX10.0规范的统一渲染架构发布以前,渲染管线曾经是选购显卡的一项重要指标.然而采用流处理器渲染架构,由于硬件工作效率更高,目前已经逐渐取代了采用渲染管线的传统架构,在消费领域渲染管线的概念慢慢被淡化了.但是在计算机图形学领域,渲染管线却依然有着举足轻重的地位,因为它依然是实时渲染的基本原理.虽然在上一章提到了渲染管线这一概念,但并没有给出详细的解释,在这一章我要对渲染管线进行一个深入的分析. 2.2什么是渲染管线 ??渲染就是把3D场景转换到

shader开发_3.渲染管线

shader 以可编程性可分为 固定渲染管线  和  可编程渲染管线 其中固定渲染管线主要是在老旧的显卡上,当时显卡还不具备编程能力 固定的由于都是设置各个功能 打开关闭 所以自定义功能不强 所以现在都是可编程 (固定的就跳过了 ) 下面是一个例子 [csharp] view plain copy print? Shader "Custom/gudingguanxian" { Properties { _Color ("主颜色", Color) = (1,1,1,1

【Unity Shaders】学习笔记——渲染管线

[Unity Shaders]学习笔记——Shader和渲染管线 转载请注明出处:http://www.cnblogs.com/-867259206/p/5595924.html 写作本系列文章时使用的是Unity5.3. 写代码之前: 当然啦,如果Unity都没安装的话肯定不会来学Unity Shaders吧? 阅读本系列文章之前你需要有一些编程的概念. 在VS里面,Unity Shaders是没有语法高亮显示和智能提示的,VS党可以参考一下这篇文章使代码高亮显示,也可以下载shaderlab

[Unity Shader]Shader分类

Shader的分类: Shader按管线分类一般分为固定渲染管线与可编程渲染管线 (1)固定渲染管线 ——这是标准的几何&光照(Transforming&Lighting)管线,功能是固定的,它控制着世界.视.投影变换及固定光照控 制和纹理混合.T&L管线可以被渲染状态控制,矩阵,光照和采制参数.功能比较有限.基本所有的显卡都能正常运行. (2)可编程渲染管线——对渲染管线中的顶点运算和像素运算分别进行编程处理,而无须象固定渲染管线那样套用一些固定函数,取代设置参数来控制管线. u