本文整理汇总了C++中PVector::Dot方法的典型用法代码示例。如果您正苦于以下问题:C++ PVector::Dot方法的具体用法?C++ PVector::Dot怎么用?C++ PVector::Dot使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PVector
的用法示例。
在下文中一共展示了PVector::Dot方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
//classifies a polygon with regards to the plane. It will return one of the PLANE_XXX values
//indicating the classification of the polygon
static uint32 ClassifyPoly(const PVector& vNormal, PReal fPlaneDist, CPrePoly* pPoly)
{
//sanity check
ASSERT(pPoly);
//first classify the poly sphere
PReal fDot = vNormal.Dot(pPoly->m_BasePoly.GetCenterDirect()) - fPlaneDist;
//see if it lies entirely on one side
PReal fPolyRad = pPoly->m_BasePoly.GetRadiusDirect();
if(fDot > fPolyRad)
{
//it is entirely on the front side
return PLANE_FRONT;
}
else if(fDot < -fPolyRad)
{
//it is entirely on the back side
return PLANE_BACK;
}
uint32 nRV = PLANE_ON;
uint32 nNumVerts = pPoly->NumVerts();
//the polygon could span, so now we have to do the full every vert check
for(uint32 nCurrVert = 0; nCurrVert < nNumVerts; nCurrVert++)
{
fDot = vNormal.Dot(pPoly->Pt(nCurrVert)) - fPlaneDist;
if(fDot < -PLANAR_EPSILON)
{
//check for front side intersection
for(nCurrVert++; nCurrVert < nNumVerts; nCurrVert++)
{
if(vNormal.Dot(pPoly->Pt(nCurrVert)) - fPlaneDist > PLANAR_EPSILON)
{
return PLANE_SPAN;
}
}
return PLANE_BACK;
}
if(fDot > PLANAR_EPSILON)
{
//check for front side intersection
for(nCurrVert++; nCurrVert < nNumVerts; nCurrVert++)
{
if(vNormal.Dot(pPoly->Pt(nCurrVert)) - fPlaneDist < -PLANAR_EPSILON)
{
return PLANE_SPAN;
}
}
return PLANE_FRONT;
}
}
return nRV;
}