网格模型中级四

作者:StrongCoding

邮箱:StrongCoding@qq.comDX群:130302441

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

 

这一篇我们一起学习下渐进网格,不多说废话,开主题:

 

、渐变网格的概念

 

     渐进网格通过ID3DXPMESH接口来实现.允许我们通过简化边来简化我们的MESH模型.我们能够简化,或者说简化到一定程度后, 复原之前的MESH.可分三个层次:高、中、低.

       

二、渐进网格的优势

 

      渐进网格就像LOD地形一样,根据距离摄像机的远近,可降低其渲染细节,所以提高了渲染效率.

 

三、如何产生一个渐变网格

 

      我们通过D3DXGeneratePMesh这个方法来实现渐变网格,其原型:

 

      HRESULT D3DXGeneratePMesh(

 		 							LPD3DXMESH pMesh, // 原MESH
  									CONST DWORD * pAdjacency, // 指向一个包含原MESH的邻接信息数组
  								        CONST D3DXATTRIBUTEWEIGHTS * pVertexAttributeWeights
													     //  原MESH的顶点品质权重值 		 
  									CONST FLOAT * pVertexWeights, // 原MESH的顶点权重值
 		 							DWORD MinValue, // 指定我们期望简化的最少顶点数或者面数
  									DWORD Options,   // 指定上面这个参数到底指的是顶点还是面数
  									LPD3DXPMESH * ppPMesh // 输出我们的渐进网格MESH
);
 
	四、对于顶点品质权重的相关补充说明:
		顶点权重值允许我们为每一个顶点属性指定一个权值,0.0表示没有权值值,顶点的权重值越高,被溢出的可能性就越低.
		原型:
			typedef struct D3DXATTRIBUTEWEIGHTS {
    												FLOAT Position;  	// 顶点位置		默认1.0
    												FLOAT Boundary;     // 混合权重值 	默认1.0
    												FLOAT Normal;		// 正常值		默认1.0
   		 										FLOAT Diffuse;		// 漫反射值		默认0.0
   		 										FLOAT Specular;	// 高光值		默认0.0
    												FLOAT Texcoord[8]; // 8个纹理{ 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 }
    												FLOAT Tangent;       // 正切
    												FLOAT Binormal;	// 次法线
											} D3DXATTRIBUTEWEIGHTS, *LPD3DXATTRIBUTEWEIGHTS;
 
		注意:默认的品质权重值是被推荐使用的,除非你的应用程序有一个很重要的理由而不使用它.
 
	五、构建渐进网格模型的核心  ID3DXPMESH
		DWORD GetMaxFaces();  // 返回渐进网格能够被设置的最大面数
		DWORD GetMaxVertices(); // 返回渐进网格能够被设置的最大顶点数
		DWORD GetMinFaces(); // 返回渐进网格能够被设置的最小面数
		DWORD GetMinVertices(); // 返回渐进网格能够被设置的最小顶点数
		HRESULT SetNumFaces(DWORD Faces); // 设置渐进网格所能设置的面数,以便让MESH简便或者复杂化
		HRESULT SetNumVertices(DWORD Vertices); // 设置渐进网格所能设置的顶点数
		HRESULT TrimByFaces( DWORD NewFacesMin, DWORD NewFacesMax
							 DWORD * rgiFaceRemap,DWORD * rgiVertRemap
						      );// 允许我们设置新的最小最大渐变网格MESH的面数,也返回面或者顶点的重映射信息
		HRESULT TrimByVertices( DWORD NewVerticesMin, DWORD NewVerticessMax,
  							     DWORD * rgiFaceRemap, DWORD * rgiVertRemap
						      );// 允许我们设置新的最小最大渐变网格MESH的顶点数,也返回面或者顶点的重映射信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值