XNA Billboard спрайт в плоскости камеры - PullRequest
1 голос
/ 20 июля 2011

Я установил камеру с

        _aspectRatio = device.Viewport.AspectRatio;
        _projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(90.0f),_aspectRatio,0.1f,10000.0f);

Матрица вида устанавливается с помощью Обновления, а положение _ задается поворотом, определенным в повороте.

private void Update()
{
    _viewMatrix = Matrix.CreateLookAt(_position, _lookAt, Vector3.Up);
}

public void Rotate(float angle)
{
    rotation += angle;
    _position = Vector3.Transform(_position, Matrix.CreateRotationY(angle));
    Update();
}

Дляустановите спрайт в поле, я использую этот код:

        _effect.Parameters["xWorld"].SetValue(Matrix.CreateRotationY(camera.rotation) * PositionMatrix);
        _effect.Parameters["xView"].SetValue(camera.ViewMatrix);
        _effect.Parameters["xProjection"].SetValue(camera.ProjectionMatrix);
        _effect.Parameters["xTexture"].SetValue(_texture);

Работает, спрайт смотрит на камеру перпендикулярно с плоскостью камеры.Проблемы возникают, когда вектор положения камеры изменяется, спрайт сохраняет начальный угол, и я не знаю, где можно рассчитать измененное вращение Y для спрайта.

1 Ответ

0 голосов
/ 09 октября 2011

Решение было в том, что я взял вращение у в классе камеры.В этом классе у меня был метод, где я мог видеть вращение у.

...