int CExtremeTriangle::FindFurthestPoint(SFloat3* psPoints, int iStride)
{
	int					iFarIndex;
	int					i;
	SFloat3*			psOther;
	float				fDist;
	float				fMaxDist;
	int					iIndex;

	fMaxDist = 0.0f;
	iFarIndex = -1;
	for (i = 0; i < maiVisible.NumElements(); i++)
	{
		iIndex = maiVisible.GetValue(i);
		psOther = GetPosition(psPoints, iStride, iIndex);

		fDist = Float3Dot(mpsNormal, psOther)-d;
		if ((fDist > fMaxDist) || ((iFarIndex == -1) && fDist == 0.0f))
		{
			fMaxDist = fDist;
			iFarIndex = iIndex;
		}
	}
	return iFarIndex;
}
void CMeshSmoothGroups::GenerateSmoothingFromAngles(CMeshEditor* pcMeshEditor)
{
	int				i;
	int				iNumPolygons;
	CMeshPolygon*	pcPolygon;
	CArrayFloat3	asNormals;
	CArrayInt		aiAdjPolys;
	SFloat3*		psThisNormal;
	SFloat3*		psOtherNormal;
	int				j;
	int				iOtherGon;
	float			fDot;
	float			fResult;

	fDot = Deg2Dot(mfSharpAngle);

	asNormals.Init();
	pcMeshEditor->mcPolygons.GetNormals(&asNormals, &pcMeshEditor->mpcMesh->mcNormals);

	mcSmoothingGroups.SetArrayValues(0);

	iNumPolygons = pcMeshEditor->mcPolygons.mcPolygons.NumElements();
	for (i = 0; i < iNumPolygons; i++)
	{
		psThisNormal = asNormals.Get(i);
		pcPolygon = pcMeshEditor->mcPolygons.Get(i);
		aiAdjPolys.Init();
		pcMeshEditor->mcPolygons.GetAdjacentPolygons(pcMeshEditor->mpcMesh->GetConnectivity(), i, &aiAdjPolys);

		for (j = 0; j < aiAdjPolys.NumElements(); j++)
		{
			iOtherGon = aiAdjPolys.GetValue(j);
			psOtherNormal = asNormals.Get(iOtherGon);

			fResult = Float3Dot(psThisNormal, psOtherNormal);
			if (fResult >= fDot)
			{
				//Smooth!
			}
		}

		aiAdjPolys.Kill();
	}

	asNormals.Kill();
}
BOOL CExtremeTriangle::NotContains(SFloat3* psPosition)
{
	return Float3Dot(mpsNormal, psPosition) > d;
}