public static bool FixDegenerateNormal(this Vector3 v)
{
if(v.X == 0.0f)
{
if(v.Y == 0.0f)
{
if(v.Z > 0.0f)
{
if(v.Z != 1.0f)
{
v.Z = 1.0f;
return true;
}
}
else
{
if(v.Z != -1.0f)
{
v.Z = -1.0f;
return true;
}
}
return false;
}
else if(v.Z == 0.0f)
{
if(v.Y > 0.0f)
{
if(v.Y != 1.0f)
{
v.Y = 1.0f;
return true;
}
}
else
{
if(v.Y != -1.0f)
{
v.Y = -1.0f;
return true;
}
}
return false;
}
}
else if(v.Y == 0.0f)
{
if(v.Z == 0.0f)
{
if(v.X > 0.0f)
{
if(v.X != 1.0f)
{
v.X = 1.0f;
return true;
}
}
else
{
if(v.X != -1.0f)
{
v.X = -1.0f;
return true;
}
}
return false;
}
}
if(idMath.Abs(v.X) == 1.0f)
{
if((v.X != 0.0f) || (v.Z != 0.0f))
{
v.Y = v.Z = 0.0f;
return true;
}
return false;
}
else if(idMath.Abs(v.Y) == 1.0f)
{
if((v.X != 0.0f) || (v.Z != 0.0f))
{
v.X = v.Z = 0.0f;
return true;
}
return false;
}
else if(idMath.Abs(v.Z) == 1.0f)
{
if((v.X != 0.0f) || (v.Y != 0.0f))
{
v.X = v.Y = 0.0f;
return true;
}
return false;
}
return false;
}