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);)