Direct3D基础渲染流水线.ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.本地空间 本地空间(或者称为模型空间)指定义组成物体的三角形列表时所
使用的坐标系统。本地空间在简化模型处理工作上相当有用。 例如:本地空间中创建物体时,不需要考虑物体的位置、大小以及
与世界空间中其他物体的关系。
2.世界空间 在完成各种模型的创建后,所有的物体都只在相应的本地空间中,
需要把这些模型组合到一起,形成一个场景。这个统一的坐标系统所决 定的空间称为世界空间。
D3DXMATRIX *pOut, //输出用于正交投影的变换矩阵
FLOAT w,
//取景体宽度
FLOAT h,
//取景体高度
FLOAT zn,
//取景体离摄像机的最近距离
FLOAT zf
//取景体离摄像机的最远距离
);
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换
2. 透视投影
顶点从均匀转化为非均匀:
➢ 在顶点坐标信息里除顶点位置信息外再加一个W分量坐标,设定其初始值 为1.0。
➢ 在顶点通过T&L流水线中的多个矩阵传送时,w坐标将改变它的值。w 值不为1.0的顶点是均匀的。当转换换结束时,就需要把顶点恢复为不均 匀的形式,这是通过x、y和z坐标除以w完成的。w坐标的倒数也被存储 起来。这个过程非常必要,因为光栅处理程序需要得到以非均匀x、y和 z坐标以及均匀w的倒数值(reciprocal-of-homogeneous-w, RHW)表 示的顶点。
网络游戏引擎实现
专业教程 理论讲解部分
Ver3.1
第009课 Direct3D基础
▪ 概述:
➢ D3D中的空间 ➢ 渲染流水线
• 重点:
➢ 本地空间,世界空间,视图空间,视口的概念 ➢ 渲染流水线
• 难点:
➢ 渲染流水线
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.10 D3D中的空间
z’值为: z, = z × (MaxZ - MinZ) + MinZ
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.5 光栅化
经过视口变换,我们获得了一系列2D三角形。光栅化阶段被用 于在描绘三角形时,计算每个像素的颜色值。
光栅化过程需要进行大量计算,并通常由特定的图像硬件来完 成。光栅化的结果时一个2D图像,将被显示在屏幕上。
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.4 视口变换
D3D通过IDirect3DDevice9::SetViewport()函数设置视口:
HRESULT SetViewport(CONST D3DVIEWPORT9 *pViewport //视口);
2.1.11.3 投影变换 1. 正交投影
接下来,使用下面的函数来应用正交投影变换。
g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj); g_pD3DDevice为有效的Direct3D设备指针 matProj代表一个投影变换矩阵
第009课 Direct3D基础
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.4 视口变换 SetViewport()相当于把投影空间的顶点P(x,y,z)乘以以下变 换矩阵:
经过转换后,顶点P的屏幕二维坐标x’,y’为: x, = x × Width/2 + X + Width/2 y, = y × Height/2 + Y + Height/2
转换和照明(T&L) 在这个阶段里,每个对象的顶点被从一个抽象的、浮点坐标空间转换
到基于像素的屏幕空间,并考虑用于渲染该场景的虚拟摄像机的属性。另 外,可对顶点应用不同类型的照明效果。(其他诸如裁剪和视口缩放也都 放在第一个阶段进行)
光栅化处理 图元将这些经过转化并添加了照明效果的顶点组织为点、线和三角形。
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换 1. 正交投影
在正交投影中,投影向量与观察平面垂直,物体坐标沿观察坐标 系的z轴平行投影到观察平面上,观察点和观察平面的距离不影响物体 的大小。
可以使用下面的函数来得到正交投影的变换矩阵:
D3DXMATRIX *D3DXMatrixOrthoLH(
未经转换和照明的顶点从一端进入,在内部这些顶点将完成几个连续 操作。然后,经过转换和照明处理的顶点从另一端出来。
渲染流水线的大部分过程都是在进行坐标转换 ,将顶点从一个坐标系 转换到别的坐标系。
在使用Direct3D来进行转换时,用户只需要提供描述系统转换的完整 转换矩阵,通过IDirect3DDevice->SetTransform方法来实现相应的变换。
HRESULT SetTransform( D3DTRANSFORMSTATETYPE State, //变换的类型 CONST D3DMATRIX *pMatrix //进行变换的变换矩阵);
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.1 世界变换
D3DXMATRIX *D3DXMatrixLookAtLH( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pEye, CONST D3DXVECTOR3 *pAt, CONST D3DXVECTOR3 *pUp
);
//输出用于视图变换的矩阵 //摄像机的位置 //摄像机朝向的位置 //摄像机的正方向
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换 2. 透视投影
透视投影的特点:是越远的物体在投影平面上的成像越小,这样生 成的投影图更加具有纵深感。
透视投影的观察范围是一个平截台体。平截台体是指一个去除了尖 头的锥体。在计算机图形学中,观察平截面的概念是,锥体的尖头位于 虚拟摄像机的位置,而摄像机指向该锥体的底部,将锥体的四个侧面向 屏幕的四边投影,并切除远近裁剪平面位置的锥体的前后部分。得到的 观察平截面代表摄影空间在渲染场景中的可见部分。实际应用中,如果 我们要实现一个三维的场景,则我们通常使用透视投影。
光栅化处理程序将绘制结果显示在屏幕,同时应用纹理映射并添加多种属 性。光栅化处理程序同时决定深度缓冲的结果,判断哪些像素是用户可见 的,哪些被其他像素所遮掩。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
对于Direct3D,上述过程通常被认为是一个渲染流水线。
g_pD3DDevice为有效的Direct3D设备指针 matWorld代表一个变换矩阵。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.2 视图变换 把物体转换到世界空间后,接下来就需要确定视图空间,这个过程
称为视图变换。
首先我们需要确定虚拟摄像机的属性。在Direct3D中,关于虚拟摄 像机的属性主要包括:摄像机位置、摄像机的朝向和摄像机的正方向, 分别用向量表示。可以从以下函数生成视图变换的矩阵。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换
把摄像机观察到的三维景像显示在二维的平面上,这 种三维到二维的变换就是投影变换。实际应用中,主要的 投影变换有两种类型:
➢ 正交投影 ➢ 透视投影
第009课 Direct3D基础
4. 视口 游戏中,视口经常是整个屏幕,但是视口也可以是屏幕上的矩形区域。 可能是屏幕的一部分或者是处于窗口模式下窗口的客户区。视口与其所
在的窗口相关并且通过所在窗口的相对坐标来进行描述,通常,视口坐标 是按照像素的方式取值的。
第009课 Direct3D基础 2.1 Direct3D中的基础概念
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.5 光栅化
一个三角形在屏幕中被光栅化
2.1.11 渲染流水线
非T&L顶 T T&L顶点 光 渲染的象
Direct3D渲染图形可以
点
&
栅
素
分为两个阶段:
L
化
矩阵
阶 纹理
处
➢变换和照明(T&L) ➢光栅化处理
段
理
阶
照明
图元
段
渲染状态
更多渲染 状态
渲染图形的过程
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.4 视口变换
空间变换的最后一步是通过定义屏幕显示区域的实际宽、 高等参数,将顶点从投影坐标转换为最终显示的以像素为单位 的屏幕坐标。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
FLOAT fovY,
//摄像机镜头的夹角(在y轴上的成像角度)
FLOAT Aspect,
//平截台体的纵横比
FLOAT zn,
//近平截面的距离
FLOAT zf
//远平截面的距离
);
接下来,使用下面的函数来应用透视投影变换:
g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj); g_pD3DDevice为有效的Direct3D设备指针 matProj代表一个投影变换矩阵。
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.2 视图变换
接下来,使用下面的函数来设置视图变换。
g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView); g_pD3DDevice为有效的Direct3D设备指针 matWorld代表一个视图变换矩阵
float MinZ; //视口内景物的最小深度值,0-1.0之间,通常为0
float MaxZ; //视口内景物的最大深度值,0-1.0之间,通常为1
} D3DVIEWPORT9;
通常情况下,参数MinZ和MaxZ被设为0和1.0f,即取景范围的最 近和最远距离,表示在投影取景范围内,顶点只要满足了x∈(-1.0f , 1.0f)、y∈(-1.0f , 1.0f)和z∈(0.0f , 1.0f),就能通过裁剪,予以 显示。
Байду номын сангаас
2.1.11 渲染流水线
2.1.11.4 视口变换
在Direct3D中定义的视口结构:
typedef struct _D3DVIEWPORT9 {
DWORD X;
//视口区域的左上角x坐标
DWORD Y;
//视口区域的左上角y坐标
DWORD Width; //视口区域的宽度
DWORD Height; //视口区域的高度
渲染流水线的第一步是将物体从本地坐标系转换到世界空间,这一 过程称为世界变换。
它的作用是: 把独立的物体放在一个统一的坐标系内,组合成一个 完整的场景。在世界变换中主要完成的是对模型的转换,包括旋转、缩 放、平移等。
设置世界变换的函数如下:
g_pD3Ddevice->SetTransform( D3DTS_WORLD, &matWorld);
物体在世界空间里除了自身的属性外,更重要的是要考虑和其他物体 之间的位置关系等。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.10 D3D中的空间
3. 视图空间 Direct3D允许在场景中设置一个虚拟摄像机,决定我们看到的场景,由
虚拟摄像机决定的空间称为视图空间。 在世界空间中,世界空间的坐标原点和坐标轴完全由程序员决定,对于 Direct3D而言,我们更需要考虑的是我们能看到些什么。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换
2. 透视投影
下面的函数用于定义透视变换的矩阵:
D3DXMATRIX *D3DXMatrixPerspectiveFovLH(
D3DXMATRIX *pOut, //输出用于透视投影的变换矩阵
使用的坐标系统。本地空间在简化模型处理工作上相当有用。 例如:本地空间中创建物体时,不需要考虑物体的位置、大小以及
与世界空间中其他物体的关系。
2.世界空间 在完成各种模型的创建后,所有的物体都只在相应的本地空间中,
需要把这些模型组合到一起,形成一个场景。这个统一的坐标系统所决 定的空间称为世界空间。
D3DXMATRIX *pOut, //输出用于正交投影的变换矩阵
FLOAT w,
//取景体宽度
FLOAT h,
//取景体高度
FLOAT zn,
//取景体离摄像机的最近距离
FLOAT zf
//取景体离摄像机的最远距离
);
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换
2. 透视投影
顶点从均匀转化为非均匀:
➢ 在顶点坐标信息里除顶点位置信息外再加一个W分量坐标,设定其初始值 为1.0。
➢ 在顶点通过T&L流水线中的多个矩阵传送时,w坐标将改变它的值。w 值不为1.0的顶点是均匀的。当转换换结束时,就需要把顶点恢复为不均 匀的形式,这是通过x、y和z坐标除以w完成的。w坐标的倒数也被存储 起来。这个过程非常必要,因为光栅处理程序需要得到以非均匀x、y和 z坐标以及均匀w的倒数值(reciprocal-of-homogeneous-w, RHW)表 示的顶点。
网络游戏引擎实现
专业教程 理论讲解部分
Ver3.1
第009课 Direct3D基础
▪ 概述:
➢ D3D中的空间 ➢ 渲染流水线
• 重点:
➢ 本地空间,世界空间,视图空间,视口的概念 ➢ 渲染流水线
• 难点:
➢ 渲染流水线
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.10 D3D中的空间
z’值为: z, = z × (MaxZ - MinZ) + MinZ
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.5 光栅化
经过视口变换,我们获得了一系列2D三角形。光栅化阶段被用 于在描绘三角形时,计算每个像素的颜色值。
光栅化过程需要进行大量计算,并通常由特定的图像硬件来完 成。光栅化的结果时一个2D图像,将被显示在屏幕上。
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.4 视口变换
D3D通过IDirect3DDevice9::SetViewport()函数设置视口:
HRESULT SetViewport(CONST D3DVIEWPORT9 *pViewport //视口);
2.1.11.3 投影变换 1. 正交投影
接下来,使用下面的函数来应用正交投影变换。
g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj); g_pD3DDevice为有效的Direct3D设备指针 matProj代表一个投影变换矩阵
第009课 Direct3D基础
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.4 视口变换 SetViewport()相当于把投影空间的顶点P(x,y,z)乘以以下变 换矩阵:
经过转换后,顶点P的屏幕二维坐标x’,y’为: x, = x × Width/2 + X + Width/2 y, = y × Height/2 + Y + Height/2
转换和照明(T&L) 在这个阶段里,每个对象的顶点被从一个抽象的、浮点坐标空间转换
到基于像素的屏幕空间,并考虑用于渲染该场景的虚拟摄像机的属性。另 外,可对顶点应用不同类型的照明效果。(其他诸如裁剪和视口缩放也都 放在第一个阶段进行)
光栅化处理 图元将这些经过转化并添加了照明效果的顶点组织为点、线和三角形。
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换 1. 正交投影
在正交投影中,投影向量与观察平面垂直,物体坐标沿观察坐标 系的z轴平行投影到观察平面上,观察点和观察平面的距离不影响物体 的大小。
可以使用下面的函数来得到正交投影的变换矩阵:
D3DXMATRIX *D3DXMatrixOrthoLH(
未经转换和照明的顶点从一端进入,在内部这些顶点将完成几个连续 操作。然后,经过转换和照明处理的顶点从另一端出来。
渲染流水线的大部分过程都是在进行坐标转换 ,将顶点从一个坐标系 转换到别的坐标系。
在使用Direct3D来进行转换时,用户只需要提供描述系统转换的完整 转换矩阵,通过IDirect3DDevice->SetTransform方法来实现相应的变换。
HRESULT SetTransform( D3DTRANSFORMSTATETYPE State, //变换的类型 CONST D3DMATRIX *pMatrix //进行变换的变换矩阵);
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.1 世界变换
D3DXMATRIX *D3DXMatrixLookAtLH( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pEye, CONST D3DXVECTOR3 *pAt, CONST D3DXVECTOR3 *pUp
);
//输出用于视图变换的矩阵 //摄像机的位置 //摄像机朝向的位置 //摄像机的正方向
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换 2. 透视投影
透视投影的特点:是越远的物体在投影平面上的成像越小,这样生 成的投影图更加具有纵深感。
透视投影的观察范围是一个平截台体。平截台体是指一个去除了尖 头的锥体。在计算机图形学中,观察平截面的概念是,锥体的尖头位于 虚拟摄像机的位置,而摄像机指向该锥体的底部,将锥体的四个侧面向 屏幕的四边投影,并切除远近裁剪平面位置的锥体的前后部分。得到的 观察平截面代表摄影空间在渲染场景中的可见部分。实际应用中,如果 我们要实现一个三维的场景,则我们通常使用透视投影。
光栅化处理程序将绘制结果显示在屏幕,同时应用纹理映射并添加多种属 性。光栅化处理程序同时决定深度缓冲的结果,判断哪些像素是用户可见 的,哪些被其他像素所遮掩。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
对于Direct3D,上述过程通常被认为是一个渲染流水线。
g_pD3DDevice为有效的Direct3D设备指针 matWorld代表一个变换矩阵。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.2 视图变换 把物体转换到世界空间后,接下来就需要确定视图空间,这个过程
称为视图变换。
首先我们需要确定虚拟摄像机的属性。在Direct3D中,关于虚拟摄 像机的属性主要包括:摄像机位置、摄像机的朝向和摄像机的正方向, 分别用向量表示。可以从以下函数生成视图变换的矩阵。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换
把摄像机观察到的三维景像显示在二维的平面上,这 种三维到二维的变换就是投影变换。实际应用中,主要的 投影变换有两种类型:
➢ 正交投影 ➢ 透视投影
第009课 Direct3D基础
4. 视口 游戏中,视口经常是整个屏幕,但是视口也可以是屏幕上的矩形区域。 可能是屏幕的一部分或者是处于窗口模式下窗口的客户区。视口与其所
在的窗口相关并且通过所在窗口的相对坐标来进行描述,通常,视口坐标 是按照像素的方式取值的。
第009课 Direct3D基础 2.1 Direct3D中的基础概念
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.5 光栅化
一个三角形在屏幕中被光栅化
2.1.11 渲染流水线
非T&L顶 T T&L顶点 光 渲染的象
Direct3D渲染图形可以
点
&
栅
素
分为两个阶段:
L
化
矩阵
阶 纹理
处
➢变换和照明(T&L) ➢光栅化处理
段
理
阶
照明
图元
段
渲染状态
更多渲染 状态
渲染图形的过程
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.4 视口变换
空间变换的最后一步是通过定义屏幕显示区域的实际宽、 高等参数,将顶点从投影坐标转换为最终显示的以像素为单位 的屏幕坐标。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
FLOAT fovY,
//摄像机镜头的夹角(在y轴上的成像角度)
FLOAT Aspect,
//平截台体的纵横比
FLOAT zn,
//近平截面的距离
FLOAT zf
//远平截面的距离
);
接下来,使用下面的函数来应用透视投影变换:
g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj); g_pD3DDevice为有效的Direct3D设备指针 matProj代表一个投影变换矩阵。
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.2 视图变换
接下来,使用下面的函数来设置视图变换。
g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView); g_pD3DDevice为有效的Direct3D设备指针 matWorld代表一个视图变换矩阵
float MinZ; //视口内景物的最小深度值,0-1.0之间,通常为0
float MaxZ; //视口内景物的最大深度值,0-1.0之间,通常为1
} D3DVIEWPORT9;
通常情况下,参数MinZ和MaxZ被设为0和1.0f,即取景范围的最 近和最远距离,表示在投影取景范围内,顶点只要满足了x∈(-1.0f , 1.0f)、y∈(-1.0f , 1.0f)和z∈(0.0f , 1.0f),就能通过裁剪,予以 显示。
Байду номын сангаас
2.1.11 渲染流水线
2.1.11.4 视口变换
在Direct3D中定义的视口结构:
typedef struct _D3DVIEWPORT9 {
DWORD X;
//视口区域的左上角x坐标
DWORD Y;
//视口区域的左上角y坐标
DWORD Width; //视口区域的宽度
DWORD Height; //视口区域的高度
渲染流水线的第一步是将物体从本地坐标系转换到世界空间,这一 过程称为世界变换。
它的作用是: 把独立的物体放在一个统一的坐标系内,组合成一个 完整的场景。在世界变换中主要完成的是对模型的转换,包括旋转、缩 放、平移等。
设置世界变换的函数如下:
g_pD3Ddevice->SetTransform( D3DTS_WORLD, &matWorld);
物体在世界空间里除了自身的属性外,更重要的是要考虑和其他物体 之间的位置关系等。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.10 D3D中的空间
3. 视图空间 Direct3D允许在场景中设置一个虚拟摄像机,决定我们看到的场景,由
虚拟摄像机决定的空间称为视图空间。 在世界空间中,世界空间的坐标原点和坐标轴完全由程序员决定,对于 Direct3D而言,我们更需要考虑的是我们能看到些什么。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换
2. 透视投影
下面的函数用于定义透视变换的矩阵:
D3DXMATRIX *D3DXMatrixPerspectiveFovLH(
D3DXMATRIX *pOut, //输出用于透视投影的变换矩阵