第18章DirectX编程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第18章 Vertex Shader的介绍 主要目标: 学习如何在可编程渲染管道中定义顶点数据结构的数据成员。 学习关于顶点数据成员的不同应用。 学习如何创建、设置以及销毁一个Vertex Shader。 学习如果通过Vertex Shader来实现cartoon渲染效果。 18.1 顶点声明(Vertex Declaration) 迄今为止,都是通过灵活顶点格式(FVF)来描述一个顶点数据结构中的组成部分,然而,在可编程渲染管道中,顶点数据结构中能包括了比FVF能描述的更多类型的数据。 因此,通常使用更具有可读性和功能更强的顶点声明。 18.1.1 顶点声明的描述 我们通过一个D3DVERTEXELEMENT9结构数组来描述顶点声明。 D3DVERTEXELEMENT9结构的定义如下: 参见教材P287 D3DDECLUSAGE_PSIZE类型用于指定顶点的大小。该类型用于点精灵技术中,使我们可以基于每顶点地控制顶点大小。 如果一个顶点声明中包含用途为D3DDECLUSAGE_POSITIONT的成员,说明该顶点已经经过了变换操作,从而告诉显卡不要将该顶点送入顶点处理阶段 18.1.1 顶点声明的描述 以下是一个顶点声明的描述——如果将要描述的顶点格式中包括一个位置向量和三个法线向量。顶点声明如下: D3DVERTEXELEMENT9 decl[] = { {0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0}, {0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0}, {0, 24, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 1}, {0, 36, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 2}, D3DDECL_END() }; 18.1.2 创建顶点声明 如果已经用一个D3DVERTEXELEMENT9数组来描述顶点声明,就可以通过如下的方法获得一个指向IDirect3DVertexDeclaration9接口的指针: HRESULT IDirect3DDevice9::CreateVertexDeclaration( CONST D3DVERTEXELEMENT9 *pVertexElements, IDirect3DVertexDeclaration9 **ppDecl ); 18.1.3 启用一个顶点声明 如果我们直接使用顶点声明,就不需要再使用: Device-SetFVF(fvf); 而是使用: Device-SetVertexDeclaration(_decl); 其中_decl是一个指向IDirect3DVertexDeclaration9接口的指针。 18.2 顶点数据的用途 观察下面的顶点声明: 参见教材P290 完成了顶点声明后,需要一种映射方式将顶点声明中的元素与Vertex Shader中输入结构的成员一一对应起来。 对于decl中的元素0,通过用途POSITION以及用途索引0,将映射到输入结构中的position成员。 对于decl中的元素1,通过用途NORMAL和用途索引0,将映射到输入结构中的normal成员 对于decl中的元素2,通过用途NORMAL和用途索引1,将映射到输入结构中的faceNormal1成员 对于decl中的元素3,通过用途NORMAL和用途索引2,将映射到输入结构中的faceNormal2成员。 18.2 顶点数据的用途 目前所支持的Vertex Shader输入用途是: POSITION[n] 位置 BLENDWEIGHTS[n] 混合权重 BLENDINDICES[n] 混合索引 NORMAL[n] 法线向量 PSIZE[n] 顶点大小 DIFFUSE[n] 散射颜色 SPECULAR[n] 镜面反射颜色 TEXCOORD[n] 纹理坐标 TANGENT[n] 切线向量 BINORMAL[n] 副法线向量 TESSFACTOR[n] 锯齿因子 18.2 顶点数据的用途 一般通过如下的语义上的语法来指定用途: struct VS_OUTPUT { vector position : POSITION; vector diffuse : COLOR0; vector specular : COLOR1; }; 目前所支

文档评论(0)

三哥 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档