Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 27 Sep 2012
Offline Last Active Oct 08 2012 01:28 PM

Topics I've Started

3D calculate new vector with desired length

01 October 2012 - 12:11 PM

Hello Guys,

I'm quite new in XNA 3D, and new in 3D as well, so I need a bit help about the following issue.

I have two different models on the screen. For the left mouse click I can set the position of the model A, with the right mouse click I can do the same for model B.

To create 3D position from mouse click I use the following method:

		 public static Vector3 GetPickedPosition(Vector2 position)
		    var nearSource = new Vector3(position, 0f);
		    var farSource = new Vector3(position, 1.0f);[/font]
[font=courier new,courier,monospace]		    Vector3 nearPoint = Interface.Graphics.GraphicsDevice.Viewport.Unproject(nearSource,
																					 Camera.View, Matrix.Identity);[/font]
[font=courier new,courier,monospace]		    Vector3 farPoint = Interface.Graphics.GraphicsDevice.Viewport.Unproject(farSource,
																				    Camera.View, Matrix.Identity);[/font]
[font=courier new,courier,monospace]		    Vector3 direction = farPoint - nearPoint;
[font=courier new,courier,monospace]		    var r = new Ray(nearPoint, direction);[/font]
[font=courier new,courier,monospace]		    var n = new Vector3(0f, 1f, 0f);
		    var p = new Plane(n, 0f);[/font]
[font=courier new,courier,monospace]		    float denominator = Vector3.Dot(p.Normal, r.Direction);
		    float numerator = Vector3.Dot(p.Normal, r.Position) + p.D;
		    float t = -(numerator/denominator);[/font]
[font=courier new,courier,monospace]		    Vector3 pickedPosition = nearPoint + direction*t;[/font]
[font=courier new,courier,monospace]		    return pickedPosition;

It's working very well. The problem begins when I would like to modify the model B position programatically.

The goal what I would like to reach is if I define a new position on the screen for model B, the distance between the model A and model B position will be constant, but model B should keep the same angle\direction to the model A

Like this: http://imageupload.org/en/file/241642/problem.jpg.html

I tried to do it by myself with this method:

position of model B = GetPickedPosition(mousepos for model B) - model A position

after normalize the position of model B and finally * desired distance.

This was only an option in my many tries, but nothing worked. position of model B wasn't was when if I simply use the GetPickedPosition method.

Can anyone help me with it?

Thank you