예제 #1
0
// ***************************************************************************
void		CQuadGridClipClusterQTreeNode::noFrustumClip(CClipTrav *clipTrav)
{
	// if empty (test important for branch and leave clusters)
	if(Empty)
		return;

	// clip the sons
	if( LeafNode)
	{
		// clip DistMax.
		CVector		c= BBoxExt.getCenter();
		float		dist= (c - clipTrav->CamPos).norm();
		dist-= BBoxExt.getRadius();
		sint minDistSetup= (sint)floor(Owner->_NumDist*dist/Owner->_DistMax);
		// NB if too far, set _NumDist (ie will clip only the infinite objects ones)
		clamp(minDistSetup, 0, (sint)Owner->_NumDist);

		// clip the sons
		H_AUTO_USE( NL3D_QuadClip_SonsShowNoClip );
		ListNode.clipSons(minDistSetup);
	}
	else
	{
		// forceShow of cluster sons
		Sons[0]->noFrustumClip(clipTrav);
		Sons[1]->noFrustumClip(clipTrav);
		Sons[2]->noFrustumClip(clipTrav);
		Sons[3]->noFrustumClip(clipTrav);
	}
}
예제 #2
0
// ***************************************************************************
void		CQuadGridClipCluster::clip(CClipTrav *clipTrav)
{
	H_AUTO_USE( NL3D_QuadClip_ClusterClip );

	// clip the quadtree
	_Root.clip(clipTrav);
}
예제 #3
0
파일: hair_set.cpp 프로젝트: mixxit/solinia
//=========================================================================
void CHairSet::init (NLMISC::IProgressCallback &progress)
{
	H_AUTO_USE(RZ_HairSet)
	clear();
	uint numHairItem = SheetMngr.getNumItem(SLOTTYPE::HEAD_SLOT);
	for(uint k = 0; k < numHairItem; ++k)
	{
		// Progress bar
		progress.progress ((float)k/(float)numHairItem);

		const CItemSheet *item = SheetMngr.getItem(SLOTTYPE::HEAD_SLOT, k);
		if( (item) && (!item->getShape().empty()) )
		{
			std::string itemName = item->getShape();
			itemName = NLMISC::strlwr(itemName);
			if (item->getShape().find("cheveux", 0) != std::string::npos)
			{
				// get race
				uint16 race = (uint16) itemName[1] | ((uint16) itemName[0] << 8);
				switch(race)
				{
					case 'ma': _Hairs[Matis].push_back(k); break;
					case 'tr': _Hairs[Tryker].push_back(k); break;
					case 'zo': _Hairs[Zorai].push_back(k); break;
					case 'fy': _Hairs[Fyros].push_back(k); break;
				}
			}
		}
	}
}