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; }