Проблемы с мышью XNA

Я тащу свои волосы за то, что собирает мышь. Я не знаю, заключается ли проблема в моих вычислениях лучей или в моих BoundingSpheres, в любом случае вот код для моих вычислений лучей:

public Ray CalculateRay(InputManager input)  
{   
    Vector3 nearSource = new Vector3(input.CurrentMousePosition, 0f);  
    Vector3 farSource = new Vector3(input.CurrentMousePosition, 1f);  

    Vector3 nearPoint = Engine.Device.Viewport.Unproject(nearSource, _projectionMatrix,
    _viewMatrix, Matrix.Identity);

    Vector3 farPoint = Engine.Device.Viewport.Unproject(farSource,
    _projectionMatrix, _viewMatrix, Matrix.Identity); 

    Vector3 direction = farPoint - nearPoint;
    direction.Normalize();

    return new Ray(nearPoint, direction);
}

и для проверки пересечения:

public bool RayIntersectsModel()
{           
    foreach (ModelMesh mesh in _model.Meshes)
    {
        BoundingSphere sphere = mesh.BoundingSphere;  

        sphere.Center = _position; 

        Ray ray = Engine.Camera.CalculateRay(Engine.Input);

        if (sphere.Intersects(ray) != null) 
        {
           return true;
        }  
    }
    return false;
}

Это не так, как будто это совсем не работает, но, похоже, очень неточно... или что-то в этом роде. Модели - это просто сферы, очень простые. Любая помощь или понимание будет принята с благодарностью! Спасибо!

1 ответ

Ну, когда я трансформировал свою ограничивающую сферу, я сначала применил матрицу мира, а затем трансформировал кость. Кажется, это ставит ограничивающую сферу не на то место. Переключение на первое применение костей трансформирует ТОГДА в мировую матрицу.

Другие вопросы по тегам