Предыдущая Следующая
Рис. 17.5. Объектная система координат
Рисуем модель на экране телевизора 291
model
content.Load<Model>(«Content\\Models\\Soccerball»);
Как видите, такая запись практически идентична записи по загрузке спрайтового изображения, но вместо ключевого слова <Texture2D> используется слово <Model>. Подобная команда дается для Content Pipeline на выполнение загрузки в программу уже трехмерной модели, а не текстуры. Модель мячика находится в каталоге рабочего проекта в папке Content\Models (рис. 17.6). Здесь схема поиска модели в каталоге проекта у загрузчика Content Pipeline стандартна.
Для рисования или представления модели на экране телевизора в исходном коде класса Gamel создан метод DrawModel().
private void DrawModel(Model m) {
Matrix[] transforms = new Matrix[m.Bones.Count]; m.CopyAbsoluteBoneTransformsTo(transforms);
world = Matrix.CreateTranslation(positionModel);
view = Matrix.CreateLookAt(new Vector3(0.0f, 0.0f, 150.0f),
Vector3.Zero, Vector3.Up);
proj = Matrix.CreatePerspectiveFieldOfView(FOV, aspectRatio, nearClip, farClip);
foreach (ModelMesh mesh in m.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.World = transforms[mesh.ParentBone.Index] * world; effect.View = view; effect.Projection = proj;
}
mesh.Draw();
}
Рис. 17.6. Расположение модели в каталоге проекта
17.1.2. Метод DrawModel()
}
292 Загружаем в игру модель
Этот метод на первый взгляд кажется сложным, но на самом деле это отлаженный механизм построения модели в пространстве и вывода ее на экран. В этот метод в качестве параметра передается модель и в первых двух строках происходит считывание и преобразование всех вершин модели в один массив данных.
Затем происходит установка всех трех матриц. Мировая матрица получает позицию модели в пространстве. В матрице вида происходит установка камеры методом CreateLookAt(), где первый параметр как раз и определяет позицию камеры. В нашем случае мы удаляем камеру на 150 пикселей по оси Z в сторону ваших глаз. Два оставшихся параметра метода CreateLookAt() - типично используемые величины. По окончании этой главы самостоятельно попробуйте изменять все значения матрицы вида, чтобы уяснить суть этих преобразований. Матрица проекции для своих расчетов использует четыре переменные, о назначении которых мы уже упоминали.
Последний блок кода метода DrawModel() задействует механизм языка программирования С# и оператор foreach для цикличного перебора данных массива, или, как в нашем случае, коллекции данных. Оператор foreach позаимствован из языка программирования Visual Basic и позволяет циклично извлекать каждый элемент коллекции данных по очереди, помещая извлеченный элемент в очередной объект массива, который вынесен в заголовок этого оператора. Предыдущая Следующая
|