I'm trying to implement Object picking. My BasicModel.cs has a function:
public bool CheckRayIntersection(Ray ray)
{
//Where aabb is the BasicModel's BoundingBox
if (ray.Intersects(aabb) != null)
{ return true; }
else
{
return false;
}
}
I create the Ray in my Camera.cs
public Ray GetMouseRay(Vector2 mousePosition, Viewport viewport)
{
Vector3 near = new Vector3(mousePosition, 0);
Vector3 far = new Vector3(mousePosition, 1);
near = viewport.Unproject(near, projection, view, Matrix.Identity);
far = viewport.Unproject(far, projection, view, Matrix.Identity);
return new Ray(near, Vector3.Normalize(far - near));
}
And finally in game1.cs I check for Intersection in every BasicModel and write "Intersects" to Console.
foreach(BasicModel model in assetManager._modelsOnscreen)
{
if(model.CheckRayIntersection(camera.GetMouseRay(mouseLocation,viewport)))
{
winForm.ConsoleWrite = "intersects";
}
}
Somehow it always returns true for intersection with offset (to the right) to the actual Boundingbox. I also don't have any clue how I could visualize the problem or step through it.
Any advice is welcome, BC++
