Exemple #1
0
void ZQuadTree::_FrustumCull(CGeoMapData &pHeightMap, Point &bottomLeft, CFrustum& pFrustum)
{
	int ret;

	ret = _IsInFrustum(pHeightMap, bottomLeft, pFrustum);
	
	switch(ret)
	{
	case FRUSTUM_COMPLETELY_IN:
		m_bCulled = false;
		return;

	case FRUSTUM_PRTIALLY_IN:
		m_bCulled = false;
		break;

	case FRUSTUM_OUT:
		m_bCulled = true;
		return;
	}

	if(m_pChild[0]) m_pChild[0] ->_FrustumCull(pHeightMap, bottomLeft, pFrustum);
	if(m_pChild[1]) m_pChild[1] ->_FrustumCull(pHeightMap, bottomLeft, pFrustum);
	if(m_pChild[2]) m_pChild[2] ->_FrustumCull(pHeightMap, bottomLeft, pFrustum);
	if(m_pChild[3]) m_pChild[3] ->_FrustumCull(pHeightMap, bottomLeft, pFrustum);
}
Exemple #2
0
void AVQuadTree::_FrustumCull(TERRAIN_VERTEX *pHeightMap, AVFrustum *pFrustum )
{
	int result = _IsInFrustum(pHeightMap, pFrustum);

	if(result == FRUSTUM_TYPE_COMPLETE)
	{
		m_bCulled = false;
		return;
	}
	else if(result == FRUSTUM_TYPE_COMPLETELY)
		m_bCulled = false;
	else // FRUSTUM_TYPE_NO
	{ m_bCulled = true; return; }

	for(int i=0; i<4; i++)
		if(m_pChild[i])
			m_pChild[i]->_FrustumCull(pHeightMap, pFrustum);
}
// _IsInFrustum()함수의 결과에 따라 프러스텀 컬링 수행
void	ZQuadTree::_FrustumCull( TERRAINVERTEX* pHeightMap, ZFrustum* pFrustum )
{
	int ret;

	ret = _IsInFrustum( pHeightMap, pFrustum );
	switch( ret )
	{
		case FRUSTUM_COMPLETELY_IN :	// 프러스텀에 완전포함, 하위노드 검색 필요없음
			m_bCulled = FALSE;
			return;
		case FRUSTUM_PARTIALLY_IN :		// 프러스텀에 일부포함, 하위노드 검색 필요함
			m_bCulled = FALSE;
			break;
		case FRUSTUM_OUT :				// 프러스텀에서 완전벗어남, 하위노드 검색 필요없음
			m_bCulled = TRUE;
			return;
	}
	if( m_pChild[0] ) m_pChild[0]->_FrustumCull( pHeightMap, pFrustum );
	if( m_pChild[1] ) m_pChild[1]->_FrustumCull( pHeightMap, pFrustum );
	if( m_pChild[2] ) m_pChild[2]->_FrustumCull( pHeightMap, pFrustum );
	if( m_pChild[3] ) m_pChild[3]->_FrustumCull( pHeightMap, pFrustum );
}