public bool Normalize()
{
float n0 = SAFBIKSqrt( column0.x * column0.x + column0.y * column0.y + column0.z * column0.z );
float n1 = SAFBIKSqrt( column1.x * column1.x + column1.y * column1.y + column1.z * column1.z );
float n2 = SAFBIKSqrt( column2.x * column2.x + column2.y * column2.y + column2.z * column2.z );
bool valid = true;
if( n0 > IKEpsilon ) {
n0 = 1.0f / n0;
column0.x *= n0;
column0.y *= n0;
column0.z *= n0;
} else {
valid = false;
column0.x = 1.0f;
column0.y = 0.0f;
column0.z = 0.0f;
}
if( n1 > IKEpsilon ) {
n1 = 1.0f / n1;
column1.x *= n1;
column1.y *= n1;
column1.z *= n1;
} else {
valid = false;
column1.x = 0.0f;
column1.y = 1.0f;
column1.z = 0.0f;
}
if( n2 > IKEpsilon ) {
n2 = 1.0f / n2;
column2.x *= n2;
column2.y *= n2;
column2.z *= n2;
} else {
valid = false;
column2.x = 0.0f;
column2.y = 0.0f;
column2.z = 1.0f;
}
return valid;
}
}