Предыдущая Следующая
Выбирая позицию для мячика по оси Х, для минимального значения задается диапазон чисел от 0 до -80. Для максимального числа используем значения от
Рис. 19.1. Выбор позиции на экране
298 Движение моделей в пространстве
Случайный выбор позиции на экране 299
0 до 80, но уже в положительной плоскости оси Х. Дополнительно по оси Z устанавливается диапазон чисел от -20 до -150, что позволяет удалять или приближать мячики в пространстве. Посмотрите на рис. 19.1, где показана техника выбора позиции мячей на экране.
ФНеплохо было бы вам на этом этапе добавить в код класс для работы с текстом и выводить на экран все установленные значения для мячей, камер, матриц и т. д., для того чтобы четко понимать, как происходят вычисления всех позиций в локальной системе координат модели.
19.4. Установка матриц
Матрицы преобразований остаются у нас прежними. Сначала задается точка просмотра сцены с помощью видовой матрицы.
view = Matrix.CreateLookAt(new Vector3(0.0f, 0.0f, 150.0f), Vector3.Zero, Vector3.Up);
Затем устанавливается проекционная матрица, и здесь тоже ничего не изменяется по сравнению с предыдущим примером.
proj = Matrix.CreatePerspectiveFieldOfView(FOV, aspectRatio, nearClip, farClip);
После чего формируется цикл for, где устанавливается мировая матрица для трех мячиков, а все итоговые значения матриц передаются в качестве параметров в метод DrawModel().
for (int i = 0; ball.Length > i;
{
world = Matrix.CreateTranslation(ball[i].position); ball[i].DrawModel(world, view, proj);
}
19.5. Формируем метод для перемещения моделей
Теперь пришло время для создания метода, который будет перемещать мячик в пространстве. Здесь алгоритм действий простой: необходимо с помощью ранее созданной переменной speed изменять позицию мячей по оси Y так, как мы это делали в игре «Летящие в прерии».
void MoveBall()
{
for (int i = 0; ball.Length > i;
{
ball[i].position.Y -= ball[i].speed;
}
}
Мячи в игре падают сверху вниз, а значит, нам нужно отнимать от текущих позиций объектов заданное количество пикселей (20.0f/60.0f). Метод MoveBall() вызывается в методе Update() класса Game1 на каждой новой итерации игрового цикла. Каждая новая позиция объекта, представленная переменной position, передается в мировую матрицу, где для движения объекта в работу включается механизм переноса всех вершин модели в пространстве (те самые мировые преобразования).
19.6. Случайный выбор позиции на экране Предыдущая Следующая
|