当前位置: 首页>>代码示例>>C++>>正文


C++ Fvector2::averageA方法代码示例

本文整理汇总了C++中Fvector2::averageA方法的典型用法代码示例。如果您正苦于以下问题:C++ Fvector2::averageA方法的具体用法?C++ Fvector2::averageA怎么用?C++ Fvector2::averageA使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Fvector2的用法示例。


在下文中一共展示了Fvector2::averageA方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1:

void	tessalate_faces( xr_vector<Face*> & faces, Vertex* V1, Vertex* V2,  tesscb_face* cb_F, tesscb_vertex* cb_V  )
{
		xr_vector<Face*> & adjacent_vec = faces;
		// create new vertex (lerp)
		Vertex*		V		= lc_global_data()->create_vertex();
		V->P.lerp			(V1->P, V2->P, .5f);

		// iterate on faces which share this 'problematic' edge
		for (u32 af_it=0; af_it<adjacent_vec.size(); ++af_it)
		{
			Face*	AF			= adjacent_vec[af_it];
			VERIFY				(false==AF->flags.bSplitted);
			AF->flags.bSplitted	= true;
			_TCF&	atc			= AF->tc.front();

			// indices & tc
			int id1				= AF->VIndex(V1);
			VERIFY				( id1>=0 && id1<=2 );
			int id2				= AF->VIndex(V2);
			VERIFY				( id2>=0 && id2<=2 );
			int idB				= 3-(id1+id2);
			VERIFY				( idB>=0 && idB<=2 );

			Fvector2			UV;
			UV.averageA			(atc.uv[id1],atc.uv[id2]);

			// Create F1 & F2
			Face* F1			= lc_global_data()->create_face();
			F1->flags.bSplitted	= false;
			F1->flags.bLocked	= false;
			F1->dwMaterial		= AF->dwMaterial;
			F1->dwMaterialGame	= AF->dwMaterialGame;
			Face* F2			= lc_global_data()->create_face();
			F2->flags.bSplitted	= false;
			F2->flags.bLocked	= false;
			F2->dwMaterial		= AF->dwMaterial;
			F2->dwMaterialGame	= AF->dwMaterialGame;


			set_backface( F1->sm_group, is_backface( AF->sm_group ) );
			set_backface( F2->sm_group, is_backface( AF->sm_group ) );

			if (is_CCW(id1,id2))	
			{
				bool id1_id2_soft = is_soft_edge( AF->sm_group, id1 );
				bool id2_idB_soft = is_soft_edge( AF->sm_group, id2 );
				bool idB_id1_soft = is_soft_edge( AF->sm_group, idB );
				
				// F1
				F1->SetVertices		( AF->v[idB],	AF->v[id1],		V );
				F1->AddChannel		( atc.uv[idB],	atc.uv[id1],	UV );

				set_soft_edge		( F1->sm_group, 0, idB_id1_soft );
				set_soft_edge		( F1->sm_group, 1, id1_id2_soft );
				set_soft_edge		( F1->sm_group, 2, true );

				// F2
				F2->SetVertices		(AF->v[idB],	V,				AF->v[id2]);
				F2->AddChannel		(atc.uv[idB],	UV,				atc.uv[id2]);

				set_soft_edge		( F2->sm_group, 0, true );
				set_soft_edge		( F2->sm_group, 1, id1_id2_soft );
				set_soft_edge		( F2->sm_group, 2, id2_idB_soft );

			} else {

				bool id1_id2_soft = is_soft_edge( AF->sm_group, id2 );
				bool id2_idB_soft = is_soft_edge( AF->sm_group, idB );
				bool idB_id1_soft = is_soft_edge( AF->sm_group, id1 );

				// F1
				F1->SetVertices		(AF->v[idB],	V,				AF->v[id1]);
				F1->AddChannel		(atc.uv[idB],	UV,				atc.uv[id1]);

				set_soft_edge		( F1->sm_group, 0, true );
				set_soft_edge		( F1->sm_group, 1, id1_id2_soft );
				set_soft_edge		( F1->sm_group, 2, idB_id1_soft );

				// F2
				F2->SetVertices		(AF->v[idB],	AF->v[id2],		V);
				F2->AddChannel		(atc.uv[idB],	atc.uv[id2],	UV);

				set_soft_edge		( F2->sm_group, 0, id2_idB_soft );
				set_soft_edge		( F2->sm_group, 1, id1_id2_soft );
				set_soft_edge		( F2->sm_group, 2, true );
			}

			// Normals and checkpoint
			F1->N		= AF->N;		if (cb_F)	cb_F(F1);
			F2->N		= AF->N;		if (cb_F)	cb_F(F2);
			//smoth groups
			//F1->sm_group= AF->sm_group;
			//F2->sm_group= AF->sm_group;
			// don't destroy old face	(it can be used as occluder during ray-trace)
			// if (AF->bLocked)	continue;
			// FacePool.destroy	(g_faces[I]);
		}
		// calc vertex attributes
		{
			V->normalFromAdj		();
//.........这里部分代码省略.........
开发者ID:2asoft,项目名称:xray,代码行数:101,代码来源:xrPhase_AdaptiveHT.cpp


注:本文中的Fvector2::averageA方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。