Direct3D基础渲染流水线.ppt
清华大学DirectX游戏编程第4章(全20章)PPT课件
5 4.1.1 创建顶点缓冲区和索引缓冲区
可以用下面的方法来分别创建顶点缓冲区和索引缓 冲区:
参见教材P72
这两个方法中的大部分参数的意义都是相同的
8 * sizeof(Vertex), 0, D3DFVF_XYZ, D3DPOOL_MANAGED, &vb, 0);
7 4.1.1 创建顶点缓冲区和索引缓冲区
下面的代码展示了如何创建一个能够容纳36 个16位索引数据的动态索引缓冲区:
IDirect3DIndexBuffer9 *ib; _device->CreateIndexBuffer(
学习如何在Direct3D中渲染一个场景。
学习通过D3DXCreate*函数创建复杂的 三维物体。
4
4.1 顶点/索引缓冲区
顶点缓冲区和索引缓冲区的接口和方法都非常相似, 因此将这两个接口放在一起进行讨论。
顶点缓冲区就是一块存放顶点数据的连续的内存区 域。与顶点缓冲区相似,索引缓冲区是一块用来保存 索引信息的连续内存区域。在Direct3D中使用顶点缓 冲区和索引缓冲区来保存数据而不通过在内存中开辟 数组来保存数据,主要是因为这些数据可以放到显存 中。渲染显存中的数据要比渲染系统内存中数据快得 多。
DWORD Usage; D3DPOOL Pool; UINT Size; DWORD FVF; } D3DVERTEXBUFFER_DESC; typedef struct _D3DINDEXBUFFER_DESC { D3DFORMAT Format; D3DRESOURCETYPE Type; DWORD Usage; D3DPOOL Pool; UINT Size; } D3DINDEXBUFFER_DESC;
DIRECT3D状态详解
DIRECT3D状态详解Microsoft®Direct3D®设备是一个状态机。
应用程序设置光照、渲染和变换模块的状态,然后在渲染时传递数据给它们。
本节描述图形流水线用到的所有不同类型的状态。
•渲染状态•取样器状态•纹理层状态•状态块设备渲染状态控制Microsoft® Direct3D®设备光栅化模块的行为,它们通过改变渲染状态的属性,使用何种类型的着色算法,雾属性和其它光栅化器操作来达到这个目的。
值作为第一个参数传递给IDirect3DDevice9::SetRenderState方法。
固定功能顶点处理由IDirect3DDevice9::SetRenderState方法和以下设备渲染状态控制。
这些控制中的大多数在使用可编程顶点着色器时没有任何作用。
•D3DRS_SPECULARENABLE•D3DRS_FOGSTART•D3DRS_FOGEND•D3DRS_FOGDENSITY•D3DRS_RANGEFOGENABLE•D3DRS_LIGHTING•D3DRS_AMBIENT•D3DRS_FOGVERTEXMODE•D3DRS_COLORVERTEX•D3DRS_LOCALVIEWER•D3DRS_NORMALIZENORMALS•D3DRS_DIFFUSEMATERIALSOURCE•D3DRS_SPECULARMATERIALSOURCE•D3DRS_AMBIENTMATERIALSOURCE•D3DRS_EMISSIVEMATERIALSOURCE•D3DRS_VERTEXBLEND另外,固定功能顶点处理流水线使用以下方法设置变换、材质和光照。
•IDirect3DDevice9::SetTransform•IDirect3DDevice9::SetMaterial•IDirect3DDevice9::SetLight•IDirect3DDevice9::LightEnable注意D3DRS_SPECULARENABLE控制像素流水线中镜面反射色的加法。
第7章三维流水线
数一致)
2. 在二维屏幕上如何显示三维物体?
– 三维形体的表示----空间直线段、折线、曲线段、多
边形、曲面片,显示对象是三维的(x,y,z) – 显示器屏幕、绘图纸是二维的(x,y) – 解决方法----投影(降维)
2
三维图形的基本问题
3. 如何反映遮挡关系?
– 物体之间或物体的不同部分之间存在相互遮挡关系 – 遮挡关系是空间位置关系的重要组成部分 – 解决方法----消除隐藏面与隐藏线
uP uQ 1 (n / d ) P vP v Q 1 ( nP / d ) nQ 0
M per
0 1 0 d
19
平行投影变换
问题----在uvn中,投影平面为n=0,投影 方向为(0,0,-1),待投影点为P,求 投影点Q
20
平行投影变换
u x u y u z v v v M WC VRC x y z nx n y nz 0 0 0
0 1 0 0 0 0 1 0
0 1 0 0
0 VRPx 0 VRPy 1 VRPz 0 1
33
三维图形的显示流程图
25
投影举例
– 两点透视
参数 投影类型 VRP(WC) VPN(WC) VUP(WC) PRP(VRC) 值 透视投影 (0,0,0) (1,0,1) (0,1,0) (0.5,0.5,4)
窗口(VRC) (-1.5,1.5, -1.5, 1.5) 参数 投影类型 VRP(WC) VPN(WC) VUP(WC) PRP(VRC) 值 透视投影 (0,0,0) (1,0,1) (1,1,0) (0.5,0.5,4)
28
三维图形的显示流程图
第二章TheRenderingPipeline(渲染管道)(精)
第二章The Rendering Pipeline(渲染管道)本章的主题就是渲染管道。
它是用来创建为3D世界进行几何描述的2D图形并设定一个虚拟摄相机确定这个世界中哪一部分将被透视投影到屏幕上(好难说清呀!还是看图说话吧)。
图2.1:左图表示了多个3D世界的物体与一个摄相机的位置及其方向和可视范围,右图则为最终在屏幕上看见的结果。
学习目的:1.要搞清楚我们怎样在D3D中表示3D物体2.学习怎样模拟虚拟摄相机3.弄明白渲染管道的工作过程.2.1 Model Representation(模型的显示)一个场景即为多个物体或模型的集合。
一个物体可以由三角形网格(triangle mesh)近似的表示,如图2.2所示。
由三角形网格建立一个物体,我们称之为建模。
也就是说在3D世界中,我们使用无数的小三角形来构造3D实体对象。
3D世界中最基本的图元就是三角形,但是D3D也支持点图元和线图元但我们都不常用到。
不过在学到第14章的粒子系统的时候,将会用到点图元。
图2.2:三角形形成的地形一个多边形的两边相交的点叫做顶点。
为了描述一个三角形,我们通常指定三个点的位置来对应三角形的三个顶点,这样我们就能够很明确的表示出这个三角形了。
见图2.3。
图2.3:三个顶点定义一个三角形2.1.1 Vertex Formats(顶点格式)我们以前定义的点在数学上来说是正确的,但是当我们在D3D环境中使用它的时候就会觉得很不完善。
这是因为D3D中的顶点包含了许多附加的属性,而不再单纯的只有空间位置的信息了。
例如:一个顶点可以有颜色和法线向量属性(这两个属性分别在第四章和第五章介绍)。
D3D让我们可以灵活的构造自己的顶点格式。
换句话说,我们可以自己定义顶点的成分。
为了创建一个常规的顶点结构,我们首先要创建一个用来使顶点结构,它能存放我们想要存放的数据。
例如,下面我们定放了两种顶点数据类型,一种包含了位置和颜色信息,第二种则包含了位置,法线向量,纹理坐标信息(第六章才会学习纹理)。
Direct3D基础
第005课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.3 D3D中的颜色 2.1.3.2 D3DCOLORVALUE
1. D3DXCOLOR结构 D3DXCOLOR结构与D3DCOLORVALUE包含同样的数据成员,但是 提供了有用的构造函数与重载运算符,使颜色操纵更加方便.由于两种结 构数据成员相同,我们可以在两种结构间相互转化. typedef struct D3DXCOLOR //具体定义请参见DirectX SDK { #ifdef __cplusplus public: …… FLOAT r, g, b, a; } D3DXCOLOR, *LPD3DXCOLOR;
第005课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.3 D3D中的颜色 2.1.3.2 D3DCOLORVALUE 2. 颜色向量
由于D3DCOLORVALUE和D3DXCOLOR都有四个浮点数组 件,所以可以将颜色作为一种4维向量 (r, g, b, a).颜色向量可以 和普通向量一样进行相加减,进行缩放.点乘和叉乘对颜色向量 没有意义,但是组件之间乘法是有意义的.所以在D3DCOLOR 类中有"颜色——颜色"相乘的操作符.
我们将在一个离屏表面(即后台缓冲区)中进行描绘,当监视 器描绘完毕前台缓冲区中的内容后,我们将该前台缓存区换到交换 链的后面,而交换链中后面的后台缓冲区变为前台缓冲区.这个过 程称为Present(显示).
第005课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.4 页翻动与交换链
像素是指:图像在屏幕上显示的最小单元,即屏幕上的一个亮点. 它也指在frame buffer(颜色缓冲区)中的最小图形单元. 分辨率是指:显示设备所能显示的最大像素个数.例如:一个 分辨率为1024×768的显示屏能够显示水平方向1024个像素,垂直 方向768个像素,满屏显示1024×768 = 786432个像素.
三维灯光渲染技术ppt课件
11
材质贴图制作
(4)此时泥人模型的UV 是没法画贴 图的,使用maya 的UV 拆分角色是一 件比较麻烦的事,但使用UVlayout 软 件可以非常快的完成拆分人物UV,右 下图为经过UVlayout 软件整理后的UV。
精选版课件ppt
12
材质贴图制作
(5)模型的UV 编辑,在导出OBJ 格式,执行主菜单中的[ 窗口> 设置/ 首选项> 插件管理器], 勾选OBJExport 选项。
精选版课件ppt
42
分层渲染
在maya 中提供了一种很好的分层渲染方案,在maya 界面右下角[ 通道盒/ 层编辑器] 中,点击 渲染选项卡,此功能可以为maya 动画提供方便的分层渲染处理,为后期调整提供了很大的空间,分 层渲染的设计,是依用户自己的处理而定,本例中使用较基本的分层方式,意在提供一种常用的工作 流程,分层有角色的场景,通常场景和角色分开渲染。 (1)在maya 主菜单中的窗口中,打开大纲视图, 在大纲视图中选择人物角色模型,先按Ctrl+h 隐 藏, 在摄像机视图中,用框选的方式选择场景模型,点击“选择通道盒/ 层编辑器并创建渲染层”, 命名为bg_key。
精选版课件ppt
46
分层渲染
(4)Character 的normal 层:Character 的颜色层上鼠标点击右 键,点击“选择层中的对象”,创建一个新的渲染层,命名为 Normal_character。
精选版课件ppt
47
分层渲染
(5)Z 通道层:亮度贴图有点像景深,近实远虚, 可以用来改变场景的照明效果。框选摄像机内的模型, 点击“选择通道盒/ 层编辑器并创建渲染层”,命名 为“Z”鼠标右键点击“z”渲染层,在弹出的属性编辑 器中,选择预设,选择亮度深度。
3D基础知识介绍PPT课件
2021/3/9
20 20
放映结束 感谢各位的批评指导!
谢 谢!
让我们共同进步
2021/3/9
21
优点:分辨率、透光率方面能保证,不会影响既有的设计架构,3D显示效果出色 缺点:技术尚在开发,产品不成熟
2021/3/9
16
3
主动快门式3D技术介绍
2021/3/9
17
主动快门式3D技术介绍
常见问题
CROSSTALK(鬼影):由于受液晶响应速度的影响,如左眼在观看左眼图像时, 会同时看到上一场残留的部分右眼图像,导致左右眼图像重叠,形成重影, 叫crosstalk,任何基于液晶显示的快门式3D电视都存在crosstalk现象。
2021/3/9
5
实现3D显像的技术概述
三、全息技术:
•全息技术是利用光波的干涉和衍射原理记录并再现物体的真实感的一种成像技术。 •全息技术再现的图像立体感强,具有真实的视觉效应。除用光波产生全息图外, 现在已发展到可用计算机产生全息图,然而需要的计算量极其巨大。 •全息术应该是3D显示的终极解决方案,但目前还有很多技术问题有待解决,短期 内难有成熟产品量产。
优点:与既有的LCD液晶工艺兼容,因此在量产性和成本上较具优势 缺点:画面亮度低,分辨率会随着显示器在同一时间播出影像的增加呈反比降低
2021/3/9
14
裸眼式3D技术
柱状透镜(Lenticular Lens)技术
柱状透镜(Lenticular Lens)技术也被称为双凸透镜或微柱透镜3D技术,其最大 的优势便是其亮度不会受到影响。柱状透镜3D技术的原理是在液晶显示屏的前面加 上一层柱状透镜,使液晶屏的像平面位于透镜的焦平面上,这样在每个柱透镜下面 的图像的像素被分成几个子像素,这样透镜就能以不同的方向投影每个子像素。于 是双眼从不同的角度观看显示屏,就看到不同的子像素。不过像素间的间隙也会被 放大,因此不能简单地叠加子像素。让柱透镜与像素列不是平行的,而是成一定的 角度。这样就可以使每一组子像素重复投射视区,而不是只投射一组视差图像。
D3D基础知识
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换 2. 透视投影 下面的函数用于定义透视变换的矩阵: D3DXMATRIX *D3DXMatrixPerspectiveFovLH( D3DXMATRIX *pOut, //输出用于透视投影的变换矩阵 FLOAT fovY, //摄像机镜头的夹角(在y轴上的成像角度) FLOAT Aspect, //平截台体的纵横比 FLOAT zn, //近平截面的距离 FLOAT zf //远平截面的距离 ); 接下来,使用下面的函数来应用透视投影变换: g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj); g_pD3DDevice为有效的Direct3D设备指针 matProj代表一个投影变换矩阵。
网络游戏引擎实现
专业教程 理论讲解部分
Ver3.1
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.10 D3D中的空间
1.本地空间 本地空间(或者称为模型空间)指定义组成物体的三角形列表时所 使用的坐标系统。本地空间在简化模型处理工作上相当有用。 例如:本地空间中创建物体时,不需要考虑物体的位置、大小以及 与世界空间中其他物体的关系。 2.世界空间 在完成各种模型的创建后,所有的物体都只在相应的本地空间中, 需要把这些模型组合到一起,形成一个场景。这个统一的坐标系统所决 定的空间称为世界空间。 物体在世界空间里除了自身的属性外,更重要的是要考虑和其他物体 之间的位置关系等。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
Direct3D的简介
Direct3D的简介这一章的内容包括Direct3D的3D图形功能API(应用程序编程接口)的简要介绍,图形处理流水线的总揽以及快速入门的简短教程。
本章可分为以下几个部分:●Direct3D体系结构●3维坐标系与几何●Direct3D对象●设备●资源●状态●顶点的声明●顶点的格式●对象几何●渲染Direct3D体系结构这一部分介绍了Direct3D与DirectX其他组成部分、操作系统和系统硬件的关系。
包括以下几个主题:●Direct3D体系结构总揽●硬件抽象层●与系统的整合●可编程顶点作色器体系结构●可编程像素作色器体系结构Direct3D体系结构总揽上为图像处理流水线的结构图,以下是我对图的理解:Vertex Data & Primitive Data:多边形的几何数据。
其中Vertex Data是顶点数据,Primitive Data是其它相关的原始数据。
Tessellation:字面上的意思是镶嵌成小方格,实际的作用是将几何体拆为多个小的几何体以便于处理。
数学上定义为“铺嵌”,详见tessellation。
计算机科学上对于此词的翻译各异,如顶点镶嵌、棋盘型嵌石饰等。
我以为目前几种译法不慎妥当,应采用“铺嵌”为宜。
Fixed Function Pipeline:固定功能流水线。
系统提供的功能固定的图形处理流水线。
Programmable Pipeline:可编程流水线。
系统将显示设备暴露给编程者,从而编程者可以自己编写图形处理的功能模块并加入到流水线中。
其较之固定功能流水线更为灵活,可以简化流水线的处理过程,甚至实现固定功能流水线没有的功能。
以上两种流水线所做的处理包括:几何变换、顶点处理、光线处理等。
Clipping:裁剪。
基于观察棱台和视口的裁剪。
Back Face Culling:背向面剔除。
Attribute Evaluation:品质评估?Rasterization:光栅化。
D3D基础
Vertex* vertices; vertices[0] = Vertex(-1.0f, -1.0f, -1.0f); vertices[1] = Vertex(-1.0f, 1.0f, -1.0f); vertices[2] = Vertex( 1.0f, 1.0f, -1.0f); vertices[3] = Vertex( 1.0f, -1.0f, -1.0f); vertices[4] = Vertex(-1.0f, -1.0f, 1.0f); vertices[5] = Vertex(-1.0f, 1.0f, 1.0f); vertices[6] = Vertex( 1.0f, 1.0f, 1.0f); vertices[7] = Vertex( 1.0f, -1.0f, 1.0f);
第第ii部分d3d基础一d3d初始化二绘制流水线三初始化二绘制流水线三d3d中绘制四颜色五材质六光照七纹理映射八融合技术九模板五材质六光照七纹理映射八融合技术九模板初始化direct3d一概述directxsdk实际上就是一个软件开发包该软件开发包可实现3d图形处理以及外部设备的管理
第II部分 D3D基础
的深度值并进行深度测试。从而决定哪些像 素应该被写入到深度缓冲区中。因为在3D图 形显示中,前面的物体可能会遮挡后面的物 体,显示的结果应该是显示离摄像机较近的 物体,通过深度测试从而决定将哪些物体的 像素值写入到深度缓冲区中。 • D3DPOOL :内存池。也就是Direct3D资源 可以放入的内存类型,这些内存类型可以是 显存,AGP存储区或系统存储区。可通过枚 举类型指定。 •D3DMULTISAMPLE_TYPE :多重采样技
hr = d3d9->CreateDevice( D3DADAPTER_DEFAULT, // primary adapter deviceType, // device type hwnd, // window associated with device vp, // vertex processing &d3dpp, // present parameters
第2章 Direct3D编程基础
可以通过D3DCOLOR_ARGB/D3DCOLOR_RGBA宏和D3DCOLOR_XRGB宏为这两个 结构体类型的变量赋值。其中,D3DCOLOR_ARGB和D3DCOLOR_RGBA宏将取值范围 在0~255之间的颜色分量值转换为一个DWORD类型的数,而D3DCOLOR_XRGB宏则 将Alpha分量设置为0xFF。例如:
Direct3D应用程序可以与GDI应用程序同时存在,并且它们都可以通过图形卡 (显卡)的设备驱动程序访问计算机的图形硬件。然而与GDI不同的是,Direct3D 可以通过创建一个HAL设备从而充分利用应用设备的优势。Direct3D与系统组件之 间的关系如图2.1所示。
第八章三维形体输出流水线-PPT精选
0.133 0.935 0.327 0
0 0
0 0
0 0
10
正二测和正等测
正等侧投影需满足:
cos2 y sin 2 y sin 2 x cos2 x
sin 2 y sin 2 x cos2 y cos2 x
求得: x 35 y 45 正等测图的变换矩阵为
斜二侧中:l=1/2, β=arctgα=63.4 yc
正平行投影:l=0, β=90 zc
β l P’
α
P(0,0,1)
xc
透视的基本知识
透视投影是一种中心投影法,在日常生活中, 我们观察外界的景物时,常会看到一些明显的 透视现象。
如:我们站在笔直的大街上,向远处看去,会 感到街上具有相同高度的路灯柱子,显得近处 的高,远处的矮,越远越矮。这些路灯柱子, 即使它们之间的距离相等,但是视觉产生的效 果则是近处的间隔显得大,远处的间隔显得小, 越远越密。观察道路的宽度,也会感到越远越 窄,最后汇聚于一点。这些现象,称之为透视 现象。
0
10
0 0
0 0
0 0
10
cos y sin x sin y 0 0
T
0
sin y
0
cos x sin x cos y
0
0 0
0 0
10
正二测和正等测
下面主要讨论正二测和正等测的投影变换矩阵, 即确定变换矩阵中的θ x角和θ y角。
Байду номын сангаас
所以
xyss
xe ye
ze lcos ze lsin
yc
zc P(0,0,1)
directx第8章PPT课件
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
2
精选PPT课件
D3DBLEND_SRCALPHA);
//设定源混合因子。
D3DBLEND_SRCALPHA为当前绘制像素的Alpha值。
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,
D3DBLEND_INVSRCALPHA);
//设定目标混合因子,
D3DBLEND_INVSRCALPHA为1减去当前绘制像素的Alpha值。
• Color=(RGBsrc*Alphasrc)+(RGBdst*(1-Alphasrc))
11
精选PPT课件
8.1 Alpha混合
❖ 当前像素Alpha值的设定。
g_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); g_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
8.1 Alpha混合
背景颜色(红色)、漫反射颜色(蓝色)、纹理(颜色) RGBsrc=? RGBdst=?
9
精选PPT课件
8.1 Alpha混合
❖ Alpha混合公式中的源混合系数和目标混合系数 是通过D3DBLEND枚举常量指定。
Direct3D-6基础
第006课 Direct3D基础 课 基础 2.1 Direct3D中的基础概念
2.1.6 灵活顶点格式(Flexible Vertex Format (FVF))
如果使用灵活顶点格式,必须以以下顺序来格式化所有的顶点: 位置(未转化或者已转化的x、y、z)——(浮点数)x坐标、y坐标、z坐标。 RHW(仅用于已经转化的顶点)——(浮点数)rhw(齐次w值的倒数) 混合加权值——1∼5的浮点数。 ∼ 顶点法线(仅用于未经转化的顶点)——(浮点数)x法线、y法线、z法线。 散射光颜色——(DWORD)扩散色,用RGBA表示。 反射光颜色——(DWORD)反射色,用RGBA表示。 纹理坐标集1∼8——(浮点数)纹理映射的u坐标,v坐标。
第006课 Direct3D基础 课 基础 2.1 Direct3D中的基础概念
2.1.7 图元类型
2.1.7.3 线带 线带由一系列的线段组成,前一个线段的终点是下一条线段的起点, 通过调用图形绘制函数: g_pD3DDevice->DrawPrimitive(D3DPT_LINESTRIP, 0, 5); 用线带方式绘制的图形如下:
第006课 Direct3D基础 课 基础 2.1 Direct3D中的基础概念
2.1.7 图元类型
2.1.7.6 三角形扇 三角形扇也是由一系列的三角形组成,每两个三角形有两个顶点重合。 通过调用图形绘制函数: g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 0, 3); 用三角形带方式绘制的图形如下:
2.1.5 设备(Device)
设备是计算机的硬件,也就是我们用来进行图形绘制的物理设备。 在这里我们可以理解为计算机的显示卡。 每一种硬件设备的能力都有所不同。所以在应用程序中,我们需 要检查设备是否支持某种特性。 D3D的特性都是D3DCAPS9结构的数据成员或一个数据位。 D3DCAPS9将根据设备的特性被初始化。所以我们只需检查 D3DCAPS9中的数据成员或数据位,即可确定设备是否支持某种特 性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1.11 渲染流水线
2.1.11.3 投影变换 2. 透视投影
透视投影的特点:是越远的物体在投影平面上的成像越小,这样生 成的投影图更加具有纵深感。
透视投影的观察范围是一个平截台体。平截台体是指一个去除了尖 头的锥体。在计算机图形学中,观察平截面的概念是,锥体的尖头位于 虚拟摄像机的位置,而摄像机指向该锥体的底部,将锥体的四个侧面向 屏幕的四边投影,并切除远近裁剪平面位置的锥体的前后部分。得到的 观察平截面代表摄影空间在渲染场景中的可见部分。实际应用中,如果 我们要实现一个三维的场景,则我们通常使用透视投影。
FLOAT fovY,
//摄像机镜头的夹角(在y轴上的成像角度)
FLOAT Aspect,
//平截台体的纵横比
FLOAT zn,
//近平截面的距离
FLOAT zf
//远平截面的距离
);
接下来,使用下面的函数来应用透视投影变换:
g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj); g_pD3DDevice为有效的Direct3D设备指针 matProj代表一个投影变换矩阵。
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 视口变换 SetViewport()相当于把投影空间的顶点P(x,y,z)乘以以下变 换矩阵:
经过转换后,顶点P的屏幕二维坐标x’,y’为: x, = x × Width/2 + X + Width/2 y, = y × Height/2 + Y + Height/2
渲染流水线的第一步是将物体从本地坐标系转换到世界空间,这一 过程称为世界变换。
它的作用是: 把独立的物体放在一个统一的坐标系内,组合成一个 完整的场景。在世界变换中主要完成的是对模型的转换,包括旋转、缩 放、平移等。
设置世界变换的函数如下:
g_pD3Ddevice->SetTransform( D3DTS_WORLD, &matWorld);
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
);
//输出用于视图变换的矩阵 //摄像机的位置 //摄像机朝向的位置 //摄像机的正方向
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.4 视口变换
空间变换的最后一步是通过定义屏幕显示区域的实际宽、 高等参数,将顶点从投影坐标转换为最终显示的以像素为单位 的屏幕坐标。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
转换和照明(T&L) 在这个阶段里,每个对象的顶点被从一个抽象的、浮点坐标空间转换
到基于像素的屏幕空间,并考虑用于渲染该场景的虚拟摄像机的属性。另 外,可对顶点应用不同类型的照明效果。(其他诸如裁剪和视口缩放也都 放在第一个阶段进行)
光栅化处理 图元将这些经过转化并添加了照明效果的顶点组织为点、线和三角形。
g_pD3DDevice为有效的Direct3D设备指针 matWorld代表一个变换矩阵。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.2 视图变换 把物体转换到世界空间后,接下来就需要确定视图空间,这个过程
称为视图变换。
首先我们需要确定虚拟摄像机的属性。在Direct3D中,关于虚拟摄 像机的属性主要包括:摄像机位置、摄像机的朝向和摄像机的正方向, 分别用向量表示。可以从以下函数生成视图变换的矩阵。
1.本地空间 本地空间(或者称为模型空间)指定义组成物体的三角形列表时所
使用的坐标系统。本地空间在简化模型处理工作上相当有用。 例如:本地空间中创建物体时,不需要考虑物体的位置、大小以及
与世界空间中其他物体的关系。
2.世界空间 在完成各种模型的创建后,所有的物体都只在相应的本地空间中,
需要把这些模型组合到一起,形成一个场景。这个统一的坐标系统所决 定的空间称为世界空间。
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.5 光栅化
一个三角形在屏幕中被光栅化
光栅化处理程序将绘制结果显示在屏幕,同时应用纹理映射并添加多种属 性。光栅化处理程序同时决定深度缓冲的结果,判断哪些像素是用户可见 的,哪些被其他像素所遮掩。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
对于Direct3D,上述过程通常被认为是一个渲染流水线。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换
把摄像机观察到的三维景像显示在二维的平面上,这 种三维到二维的变换就是投影变换。实际应用中,主要的 投影变换有两种类型:
➢ 正交投影 ➢ 透视投影
第009课 Direct3D基础
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 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换 1. 正交投影
在正交投影中,投影向量与观察平面垂直,物体坐标沿观察坐标 系的z轴平行投影到观察平面上,观察点和观察平面的距离不影响物体 的大小。
可以使用下面的函数来得到正交投影的变换矩阵:
D3DXMATRIX *D3DXMatrixOrthoLH(
2.1.11 渲染流水线
2.1.11.4 视口变换
在Direct3D中定义的视口结构:
typedef struct _D3DVIEWPORT9 {
DWORD X;
//视口区域的左上角x坐标
DWORD Y;
//视口区域的左上角y坐标
DWORD Width; //视口区域的宽度
DWORD Height; //视口区域的高度
4. 视口 游戏中,视口经常是整个屏幕,但是视口也可以是屏幕上的矩形区域。 可能是屏幕的一部分或者是处于窗口模式下窗口的客户区。视口与其所
在的窗口相关并且通过所在窗口的相对坐标来进行描述,通常,视口坐标 是按照像素的方式取值的。
第009课 Direct3D基础 2.1 Direct3D中的基础概念
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.3 投影变换
2. 透视投影
下面的函数用于定义透视变换的矩阵:
D3DXMATRIX *D3DXMatrixPerspectiveFovLH(
D3DXMATRIX *pOut, //输出用于透视投影的变换矩阵
第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.4 视口变换
D3D通过IDirect3DDevice9::SetViewport()函数设置视口:
HRESULT SetViewport(CONST D3DVIEWPORT9 *pViewport //视口);
网络游戏引擎实现
专业教程 理论讲解部分
Ver3.1
第009课 Direct3D基础
▪ 概述:
➢ D3D中的空间 ➢ 渲染流水线
• 重点:
➢ 本地空间,世界空间,视图空间,视口的概念 ➢ 渲染流水线
• 难点:
➢ 渲染流水线
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.10 D3D中的空间
z’值为: z, = z × (MaxZ - MinZ) + MinZ