private Vector3D getViewUp(Viewpoint oVP)
{
double units = GetGunits();
Rotation3D oRot = oVP.Rotation;
// calculate view direction
Rotation3D oNegtiveZ = new Rotation3D(0, 1, 0, 0);
Rotation3D otempRot = MultiplyRotation3D(oNegtiveZ, oRot.Invert());
Rotation3D oViewDirRot = MultiplyRotation3D(oRot, otempRot);
// get view direction
Vector3D oViewDir = new Vector3D(oViewDirRot.A, oViewDirRot.B, oViewDirRot.C);
return oViewDir.Normalize();
}