Предыдущая Следующая
Vector3 direction = farPoint - nearPoint; direction.Normalize();
Ray pickRay = new Ray(nearPoint, direction); return pickRay;
}
} }
ФЗаметьте, что координаты прицела на самом деле находятся не в его центре, а в левом верхнем углу изображения мушки. Это связано с тем, что получая координаты курсора мыши, методом Mouse.GetState(), мы получаем координаты верхнего левого угла курсора. При желании вы можете переопределить полученные значения непосредственно в центр прицела.
Глава 21
Формируем _трехмерную сцену
Способов создания полноценных трехмерных сцен очень много. Выбор того или иного способа целиком зависит от игровых задач. В игре «Футбольный стрелок» наша камера статична и находится в одном положении, поэтому для организации сцены был выбран механизм загрузки в игру модели стадиона. Суть этого способа заключается в том, чтобы загрузить в игру модель стадиона и установить камеру под определенным углом, а затем на фоне стадиона развернуть все игровые действия.
Для текущего примера был создан новый проект под названием Plane, который находится на компакт-диске в папке Code\Chapter21\Plane. Начиная с раздела 21.1, мы приступим к его изучению. Дополнительно в папке Code\Chapter21\ имеется еще один проект под названием PlaneMove. В нашей игре нет необходимости перемещаться по полю стадиона, но показать вам, как это делается, нужно обязательно. После изучения проекта Plane рассмотрите исходный код примера PlaneMove, думается, что этот пример вам обязательно пригодится в своих собственных играх.
21.1. Изменяем позицию камеры
Переходим к работе над игрой и начнем с того, что добавим в исходный код класса Gamel проекта Plane новую переменную camera.
Vector3 camera = new Vector3(0.0f, 20.0f, 250.0f);
Эта переменная будет задавать одинаковую позицию просмотра сцены для мячей и футбольного стадиона.
// метод Draw()
view = Matrix.CreateLookAt(camera, Vector3.Zero, Vector3.üp);
А также для вычисления позиции курсора мыши.
// метод GetPickRay()
Ray GetPickRay()
{
view = Matrix.CreateLookAt(camera, Vector3.Zero, Vector3.Up);
}
318 Формируем трехмерную сцену
Новые игровые позиции для мячей 319
Таким образом, мы создаем одну переменную и упрощаем возможность обоюдного изменения точки просмотра сцены в двух и более местах исходного кода. Сама точка просмотра трехмерной сцены удаляется на 250 пикселей и поднимается от центра экрана на 20 пикселей.
Предложенные значения точки просмотра сцены взяты не с неба, эти значения были сначала опробованы на загружаемой в игру модели стадиона, и только потом был выбран наиболее выгодный ракурс. В этом плане бесплатные модели имеют свою обратную сторону медали. Здесь уже приходится подстраиваться под имеющийся графический контент, вместо того чтобы модельер, делающий модели, подстраивался под ваши требования... Предыдущая Следующая
|