- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 顶点坐标变换 空间中的物体需要使用三维坐标来描述,而显示器是一个二维的表面,所以在屏幕上渲染一个三维场景时,首先需要将描述空间物体的三维坐标变换为二维坐标,这在Direct3D中称为顶点坐标变换。顶点坐标变换通常通过矩阵来完成。 4.1顶点坐标变换和光照流水线概述 Direct3D标准的图形显示过程可分为两个阶段。第一阶段称为坐标变换和光照(Traansforming and Linghting简称TL)。第二阶段称为光栅化处理阶段。 坐标变换和光照阶段(TL) 这个阶段,每个对象的顶点被从一个抽象的、浮点坐标空间转换到基于像素的屏幕空间,并根据场景中的光源和物体表面的材质对物体顶点应用不同类型的光照效果。还有裁剪和视口缩放也在第一阶段进行。 通过设置一个虚拟相机,世界空间的三维坐标转换成屏幕空间以像素为单位的整数坐标(坐标变换不只是物体顶点位置的坐标变换,它还可能包括顶点法线向量、纹理坐标等坐标变换),然后通过计算当时场景中的光照属性,赋予顶点相应的颜色值。 光栅化处理阶段 Direct3D将经过TL处理的顶点组织为以点、线、面为基础的图元,应用纹理贴图和物体顶点的颜色属性,根据相关渲染状态设置,决定每个像素的最终颜色值,并在屏幕上显示出来。 顶点变换流水线(TL) TL 过程在Direct3D中通常称为顶点变换流水线,在这个过程中,未经过变换和光照的顶点从一端进入,在内部这些顶点将完成几个连续操作,然后经过转换和光照的顶点从另一端出来。 模型几何变换和世界坐标系 物体在三维空间的运动和变形过程称之为模型几何变换,如平移、旋转和缩放等。我们将物体在其中运动的三维实质问题称为世界空间,它的三维坐标系表示为世界坐标系,物体顶点在世界的坐标系里的坐标表示称为世界坐标。 取景变换和观察坐标系 把图形显示想象成摄像过程,取景变换就像摄影中摄像机的摆入一样,在三维图形显示中,需要设置一个虚拟摄像机,屏幕显示的图形就是虚拟摄像机拍摄在胶片上的景物。以摄像机为参考原点,摄像机观察的方向为坐标坐标轴,建立的坐标系称为观察坐标系,物体在观察坐标系中相对坐标称为观察坐标,顶点从世界坐标到观察坐标的转换称为取景变换。 投影变换和投影坐标系 物体从世界坐标描述转换到观察坐标后,我们可以将三维物体投影到二维平面上,即投影到虚拟相机的胶片上,这个过程称为投影变换。以胶片中心为参考原点的空间坐标系称为投影坐标系,物体在投影坐标系中的坐标表示称为投影坐标。 坐标变换和屏幕表示 物体在投影坐标系中的表示为浮点坐标,通过定义屏幕显示区域(一般为屏幕大小),将浮点坐标转化为像素坐标的过程称为社区变换,该像素坐标值称为屏幕坐标。 设置顶点变换矩阵 HRESULT IDirect3DDevice9::SetTransform ( D3DTRANSFORMSTATETYPE state, CONST D3DMATRIX *pMatrix ); state取值: D3DTRANSFORMSTATE_WORLD 世界变换矩阵 D3DTRANSFORMSTATE_VIEW 取景变换矩阵 D3DTRANSFORMSTATE_PROJECTION 投影变换矩阵 pMatrix指向变换矩阵的内存地址。 设置变换的视区信息 HRESULT SetViewport ( CONST D3DVIEWPORT9 *pViewport ) 4.2矩阵类型及操作 在D3D中顶点坐标变换通常是借助于矩阵实现的,D3D中提供了许多矩阵类型和相关的矩阵运算函数。 D3DMATRIX矩阵类型 D3DMATRIX是D3D中最简单的矩阵类型: typedef struct _D3DMATRIX{ union{ struct{ float _11,_12,_13,_14; float _11,_12,_13,_14; float _11,_12,_13,_14; float _11,_12,_13,_14; } float m[4][4]; } } D3DXMATRIX矩阵类型 typedef struct D3DXMATRIX{ FLOAT _11, FLOAT _12 ,FLOAT _13, FLOAT _14; FLOAT _21, FLOAT _22 ,FLOAT _23, FLOAT _24; FLOAT _31, FLOAT _32 ,FLOAT _33, FLOAT _34; FLOAT _41, FLOAT _42 ,FLOAT _43, FLOAT
原创力文档


文档评论(0)