DirectX HLSL相关基础

 

DirectX HLSL相关

  

 

  顶点着色器可用软件顶点运算方式来模拟,即在创建设备时,将设备行为标记设定为:

  D3DCREATE_SOFTWARE_VERTEXPROCESSING

 

  在记事本中编写着色器代码,使用函数D3DXCompileShaderFromFile对着色器文件进行编译。

 

  每个着色器都用常量表来存储其变量。

  为了使应用程序能够访问着色器的常量表,D3DX库提供了接口ID3DXConstantTable

 

  获取常量的句柄:

  D3DXHANDLE ID3DXConstantTable :: GetConstantByName (D3DXHANDLE hConstant,LPSTR pName);

 

  常量的设置:

HREST ID3DXConstantTable :: SetXXX(
LPDIRECT3DDEVICE9 pDevice,
D3DXHANDLE hConstant,
XXX value);

 


  如果要对数组进行设置:

HREST ID3DXConstantTable :: SetVectorArray(
LPDIRECT3DDEVICE9 pDevice,
D3DXHANDLE hConstant,
CONST D3DXVECTOR4* pVector,
UINT Count);

 

 

  设置常量的默认值:

  HRESULT ID3DXConstantTable:: SetDefaults(LPDIRECT3DDEVICE pDevice);

  

  

  顶点声明的创建:

HRESULT CreateVertexDeclaration(
CONST D3DVERTEXELEMENT9* pVertexElements,
IDirect3DVertexDeclaration9** ppDecl)

 

  创建一种效果:

HRESULT D3DXCreateEffectFromFile(
LPDIRECT3DDEVICE9 pDevice,
LPCTSTR pSrcFile,
CONST D3DXMACRO *pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT *ppEffect,
LPD3DXBUFFER *ppCompilationErrors);

 

 

  获取效果文件中的变量:

D3DXHANDLE ID3DXEffect::GetParameterByName(
D3DXHANDLE hParameter,
LPCSTR pName);

 

 

使用顶点着色器的步骤:

  1.编写顶点着色器程序,并进行编译。

  2.创建一个IDirect3DVertexShader9 接口的对象,以表示基于所编译的着色器代码的顶点着色器。

  3.用IDirect3DDevice9::SetVertexShader方法启用顶点着色器。

 

使用像素着色器的步骤:

  1.编写像素着色器程序并进行编译。

  2.创建一个IDirect3DPixelShader9接口对象,以表示基于经过编译的着色器代码的像素着色器。

  3.用IDirect3DDevice::SetPixelShader方法启用像素着色器。

 

 

使用一种效果:

  1.获取效果文件中您希望使用的手法(technique)的句柄。

  D3DXHANDLE ID3DXEffect ::GetTechniqueByName(LPCSTR pName);

  2.激活希望使用的手法。

  HRESULT ID3DXEffect :: SetTechnique(D3DXHANDLE hTechnique);

  (激活之前需要用当前设备对其进行验证)

  HRESULT ID3DXEffect ::ValidateTechnique(D3DXHANDLE hTechnique);

  3.启用当前处于活动状态的手法。

  HRESULT ID3DXEffect :: Begin(UINT * pPasses, DWORD Flags);

  4.对于活动手法中的每一条绘制路径,绘制几何目标体。

  一种手法(Technique)可能包含多条路径(pass),所以我们必须在每条绘制路径中将几何体绘制一次。

  HRESULT ID3DXEffect ::BeginPass(UINT Pass);

  HRESULT EndPass();

  5.终止当前处于活动状态的手法。

  HRESULT ID3DXEffect :: End(VOID);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值