public static bool WorldToScreen(Vector location, out Point<float> point)
{
point = new Point<float>();
Vector transform, local;
local = location - MW3.viewmatrix.Origin;
transform.x = local.DotProduct(MW3.refdef.ViewAxis2);
transform.y = local.DotProduct(MW3.refdef.ViewAxis3);
transform.z = local.DotProduct(MW3.refdef.ViewAxis1);
if (transform.z < 0.1)
return false;
Point<float> screenCenter = new Point<float>();
screenCenter.X = (float)(MW3.refdef.Width) / 2.0f;
screenCenter.Y = (float)(MW3.refdef.Height) / 2.0f;
point.X = screenCenter.X * (1.0f - (transform.x / MW3.refdef.FovX / transform.z));
point.Y = screenCenter.Y * (1.0f - (transform.y / MW3.refdef.FovY / transform.z));
return true;
}
public static bool WorldToScreen(Vector location, out Point<float> point)
{
point = new Point<float>();
Vector transform, local;
local = location - MW3.refdef.ViewOrigin;
transform.x = local.DotProduct(MW3.refdef.ViewAxis2);
transform.y = local.DotProduct(MW3.refdef.ViewAxis3);
transform.z = local.DotProduct(MW3.refdef.ViewAxis1);
if (transform.z < 0.1)
return false;
Point<float> screenCenter = new Point<float>();
screenCenter.X = (float)(MW3.refdef.Width) / 2.0f;
screenCenter.Y = (float)(MW3.refdef.Height) / 2.0f;
point.X = screenCenter.X * (1.0f - (transform.x / MW3.refdef.FovX / transform.z));
point.Y = screenCenter.Y * (1.0f - (transform.y / MW3.refdef.FovY / transform.z));
return true;
}
but if it's really close, good.public static bool WorldToScreen(Vector location, out Point<float> point)
{
point = new Point<float>();
Vector transform, local;
local = location - MW3.refdef.Origin;
transform.x = local.DotProduct(MW3.refdef.ViewAxis2);
transform.y = local.DotProduct(MW3.refdef.ViewAxis3);
transform.z = local.DotProduct(MW3.refdef.ViewAxis1); // vertical
if (transform.z < 0.1)
return false;
Point<float> screenCenter = new Point<float>();
screenCenter.X = (float)(MW3.refdef.Width) / 2.0f;
screenCenter.Y = (float)(MW3.refdef.Height) / 2.0f; // vertical
point.X = screenCenter.X * (1.0f - (transform.x / MW3.refdef.FovX / transform.z));
point.Y = screenCenter.Y * (1.0f - (transform.y / MW3.refdef.FovY / transform.z)); // vertical
return true;
}
Right on.