DirectX9 着色器学习(二)

DirectX9 中的着色器包括:Vertex shader 和 Pixel shader。首先学习顶点着色器VS,它替换了固定功能管线中的变换(Transformation)和光照(Lighting)阶段。

顶点声明:

1.  通过 D3DVERTEXELEMENT9 结构的数据描述顶点

2.  创建顶点声明

      HRESULT  IDirect3DDevice9::CreateVertexDeclaration(CONST D3DVERTEXELEMENT9  *PVertexElements, IDirect3DVertexDeclaration9 **ppDec);

      ppDec:返回创建的接口指针

3.  使用顶点声明

     Device->SetVertexDeclaration(_decl);

顶点数据用途:

定义顶点声明的元素到顶点着色器的Input结构的数据成员

struct VS_INPUT

{

     vector position: POSITION; //位置

     vector normal: NORMAL0;  //法线向量

     vector faceNormal1: NORMAL1;

     vector faceNormal2: NORMAL2;

}受支持的顶点着色器用途有:位置、混合权重、混合索引、法线向量、顶点大小、散射颜色、镜面颜色、纹理坐标等

使用顶点着色器的步骤:

1.编写并编译顶点着色器;

       (D3DXCompileShaderFromFile()返回已编译着色器代码的指针,作为step2的输入)

2.创建一个IDirect3DVertexShader9接口以引用已编译的着色器代码上的顶点着色器;

      (CreateVertexShader((DWORD*)shader->GetBufferPoint(),&ToonShader),返回一个接口指针,作为step3的输入)

3.用IDirect3Device9::SetVertexShader方法使用这个顶点着色器。

     (Device->SetVertexShader(ToonShader);)

4.销毁顶点着色器

       (d3d::Release<IDirect3DVertexShader9 *>(ToonShader);)

原文地址:https://www.cnblogs.com/italysue/p/9369839.html