可以运行HLSL的DirectX程序2011-10-30 博客园 乌龟_毛驴之后的一段时间准备学习一下DirectX和Shader相关的文章.为了能够运行Shader,得先写个小程序.这里我选择了DirectX(其实我个人觉得,如果只是想学习Shader 的话,XNA是个不错的选择)看了几天的文档,重点看了一下DirectX Sample里面的Basic HLSL,可能是微软为了把一些控件集成进 去,方便大家观察效果的原因吧,微软使用了DXUT这个框架,对我等c++和windows编程的初学者来说特别的 不爽,所以我决定脱离DXUT框架来写一下首先打开Sample里面的D3DX9 Create Device.我们就往这个程序里面添加代码.1. 我们添加一个LoadMesh函数: 导入.X文件
HRESULT LoadMesh( IDirect3DDevice9* pd3dDevice, WCHAR* strFileName, ID3DXMesh** ppMesh ){ ID3DXMesh* pMesh = NULL; WCHAR str[MAX_PATH]; HRESULT hr; //调用D3DXLoadMeshFromX从文件中读取.X文件 D3DXLoadMeshFromX(strFileName, D3DXMESH_MANAGED, pd3dDevice, NULL, NULL, NULL, NULL, &pMesh); DWORD *rgdwAdjacency = NULL; //确定Mesh具有法线向量,如果没有的话就调用D3DXComputeNormals来进行计算. if( !(pMesh->GetFVF() & D3DFVF_NORMAL) ) { ID3DXMesh* pTempMesh; pMesh->CloneMeshFVF( pMesh->GetOptions(), pMesh->GetFVF() | D3DFVF_NORMAL, pd3dDevice, &pTempMesh ); D3DXComputeNormals( pTempMesh, NULL); pMesh = pTempMesh; } *ppMesh = pMesh; return S_OK;}