网格模型中级一

作者:StrongCoding

邮箱:StrongCoding@qq.comDX群:130302441

若文中有误,请告知.十分感谢.一起加油.

 

从这篇开始,我们将一起开启中级的网格模型教程,深夜了,不罗嗦了,直插主题:

 

、涉及的相关概念:

 

1、 ID3DXBuffer

 

      ID3DXBuffer是用来存储D3DX的邻接信息的。它仅有两个方法:

      LPVOID GetBufferPointer();  // 用于获取邻接信息的首地址的

      DWORD GetBufferSize();       // 用于获取邻接信息数组大小的

 

      ID3DXBuffer会用在加载文件网格模型的方法中。稍后做介绍。

 

2、如何创建一个空的缓冲?

 

      ID3DXBuffer* pBuffer = NULL;

     D3DXCreateBuffer( 4*sizeof(int), &pBuffer );

 

      原型:

 

      HRESULT D3DXCreateBuffer(

  									 DWORD NumBytes,
 	 								 LPD3DXBUFFER * ppBuffer
								      );

 3、从ID3DXBuffer中获取相关信息的时候,只需要做下强制转换就可以,其实也不能说强制转换了,因为本身ID3DXBuffer就               是一个LPVOID(即Void*),示例如下:

 

      (1) 你比方说,我们想要获取它所容纳的MESH的邻接信息我们就可以这样子做:

    

    DWORD* dataAdjacencyInfo = ( DWORD* )ID3DXBuffer_Temp->GetBufferPointer();

      

      (2) 再者比方说,你想要获取它的材质信息,那你就可用这样子做:

 

   D3DXMATERIAL *pMaterial = ( D3DXMATERIAL* )ID3DXBuffer_Temp->GetBufferPointer();

 

 4、收尾

 

因为D3DXBuffer这个东西是基于COM机制的,所以在你不需要它的时候,请记得释放:

 

ID3DXBuffer_Temp->Realsase();

 

 二、X文件简介:

 

我们之前使用过D3DXCreate*之类的东西创造了例如茶壶、圆柱、正方体等,其实,理论上来说,我们自己通过前面网格模型   的初级教程里边所学到的,完全我们可以通过我们自己指定顶点来生成这些东西,但是麻烦程度可想而知。基于这个原因,为了速度   简化我们程序员的负担,行业内出现了很多建模软件例如3DMAX、Maya等,于是乎出现了美工这一职业的诞生,来辅助程序员对于   真实世界的刻画。这些建模软件建出模型来之后,完全可以导入到一个外部的文件中存储模型的顶点、法线、纹理、动画信息。我们   程序员要做的事情便是解析导出来的文件。如果使用DX标准的X模型文件,我们只需要调用底层函数便可以导入这些数据,避免了我             们自己手动写某种特定格式的模型文件。

 

 三、从磁盘文件加载X文件

 

HRESULT D3DXLoadMeshFromX(

  						LPCTSTR pFilename,
  						DWORD Options,
 						LPDIRECT3DDEVICE9 pD3DDevice,
  						LPD3DXBUFFER * ppAdjacency,
  						LPD3DXBUFFER * ppMaterials,
  						LPD3DXBUFFER * ppEffectInstances,
  						DWORD * pNumMaterials,
  						LPD3DXMESH * ppMesh
					);
 
		参数请自行查阅帮助文档.
		注意:LPD3DXBUFFER *ppMaterials, 这是记录材质相关的,里边包含两层信息一个是材质信息D3DMATERIAL9
			 和纹理文件名。下面是ID3DXMATERIAL的原型:
		
			typedef struct D3DXMATERIAL {
   										 D3DMATERIAL9 MatD3D;
   										 LPSTR pTextureFilename;
									} D3DXMATERIAL, *LPD3DXMATERIAL;
 
	  四、从磁盘文件加载纹理( 实际上加载的是X文件对应的纹理文件 )
		D3DXCreateTextureFromFile(
					Device,
					mtrls[i].pTextureFilename,
					&tex);

		原型
 
			HRESULT D3DXCreateTextureFromFile(
  												LPDIRECT3DDEVICE9 pDevice,
  												LPCTSTR pSrcFile,
  												LPDIRECT3DTEXTURE9 * ppTexture
											);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值