Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static Vector3 GetScreenCoordinates(MouseState mouseState, Viewport viewport, Vector3 target, Matrix projection, Matrix view, Matrix world, float dimension = 1f, bool ceiling = true)
- {
- Vector3 pos = Vector3.Zero;
- Vector3 pos0 = new Vector3(mouseState.X, mouseState.Y, 0);
- Vector3 pos1 = new Vector3(mouseState.X, mouseState.Y, 1);
- pos0 = viewport.Unproject(pos0, projection, view, world);
- pos1 = viewport.Unproject(pos1, projection, view, world);
- Ray ray = new Ray(pos0, pos1 - pos0);
- float? depth = ray.Intersects(new Plane(Vector3.UnitY, 0));
- if (depth != null)
- {
- Vector3 ms_world_pos = (pos0 + (pos1 - pos0) * depth.Value);
- bool XN = (ms_world_pos.X < 0);
- bool ZN = (ms_world_pos.Z < 0);
- ms_world_pos.X = (int)(ms_world_pos.X / dimension);
- ms_world_pos.Y = (int)(ms_world_pos.Y / dimension);
- ms_world_pos.Z = (int)(ms_world_pos.Z / dimension);
- ms_world_pos.X += XN ? -0.5f : 0.5f;
- ms_world_pos.Y += 0;
- ms_world_pos.Z += ZN ? -0.5f : 0.5f;
- ms_world_pos *= dimension;
- pos = ms_world_pos;
- }
- if (ceiling)
- {
- pos.X = (float)Math.Ceiling(pos.X);
- pos.Y = (float)Math.Ceiling(pos.Y);
- pos.Z = (float)Math.Ceiling(pos.Z);
- }
- return pos;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement