public Unproject ( System.Vector3 source, System.Matrix projection, System.Matrix view, System.Matrix world ) : System.Vector3 | ||
source | System.Vector3 | The |
projection | System.Matrix | The projection |
view | System.Matrix | The view |
world | System.Matrix | The world |
리턴 | System.Vector3 |
public Vector3 Unproject(Vector3 source, Matrix projection, Matrix view, Matrix world)
{
Matrix matrix = Matrix.Invert(Matrix.Multiply(Matrix.Multiply(world, view), projection));
source.X = (((source.X - this.x) / ((float) this.width)) * 2f) - 1f;
source.Y = -((((source.Y - this.y) / ((float) this.height)) * 2f) - 1f);
source.Z = (source.Z - this.minDepth) / (this.maxDepth - this.minDepth);
Vector3 vector = Vector3.Transform(source, matrix);
float a = (((source.X * matrix.M14) + (source.Y * matrix.M24)) + (source.Z * matrix.M34)) + matrix.M44;
if (!WithinEpsilon(a, 1f))
{
vector.X = vector.X / a;
vector.Y = vector.Y / a;
vector.Z = vector.Z / a;
}
return vector;
}
public static Microsoft.Xna.Framework.Ray FromScreenPoint(Viewport viewport, Vector2 mousePos, Matrix view, Matrix project) { Vector3 nearPoint = viewport.Unproject(new Vector3(mousePos, 0), project, view, Matrix.Identity); Vector3 farPoint = viewport.Unproject(new Vector3(mousePos, 1), project, view, Matrix.Identity); return new Microsoft.Xna.Framework.Ray(nearPoint, farPoint - nearPoint); }