Работа с 3D-моделями в 3D max
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
µ на клавишу вперед или назад производится соответствующие движения. А при нажатие клавиш влево или вправо происходит соответствующий поворот относительно оси Y.
//Обновляем состояние объектаUpdateAvatarPosition()
{
KeyboardState keyboardState = Keyboard.GetState();
//Поворот влево(keyboardState.IsKeyDown(Keys.Left))
{+= rotationSpeed;
}
//Поворот вправо(keyboardState.IsKeyDown(Keys.Right))
{-= rotationSpeed;
}
//Движение вперед(keyboardState.IsKeyDown(Keys.Up))
{forwardMovement = Matrix.CreateRotationY(avatarlRotation);
Vector3 v = new Vector3(0, 0, forwardSpeed);
v = Vector3.Transform(v, forwardMovement);.Z += v.Z;.X += v.X;
while (IsCollide())
{.Z -= v.Z;.X -= v.X;
}
}
//Движение назад(keyboardState.IsKeyDown(Keys.Down))
{forwardMovement = Matrix.CreateRotationY(avatarlRotation);v = new Vector3(0, 0, -forwardSpeed);= Vector3.Transform(v, forwardMovement);.Z += v.Z;.X += v.X;
while (IsCollide())
{.Z -= v.Z;.X -= v.X;
}
}
//Уменьшение угла обзора камеры(keyboardState.IsKeyDown(Keys.R))
{
viewAngle -= MathHelper.ToRadians(1.0f);
}
//Увеличение угла обзора камеры(keyboardState.IsKeyDown(Keys.F))
{
viewAngle += MathHelper.ToRadians(1.0f);
}
//Если новый угол обзора вышел за дозволенные пределы
MathHelper.ToRadians(180.0f)) viewAngle = MathHelper.ToRadians(179.9f);(viewAngle MathHelper.ToRadians(180.0f)) viewAngle = MathHelper.ToRadians(179.9f);(viewAngle < MathHelper.ToRadians(0.9f)) viewAngle = MathHelper.ToRadians(1f);
// Выход из программы при нажатие Esc.
if (keyboardState.IsKeyDown(Keys.Escape))
{
Exit();
}
}
Создаем булевую функцию отвечающие за проверку столкновений объектов.
bool IsCollide()
{
//Для объекта BoundingSphere, соответствующего
//текущему объекту сцены b1;
//Получить BoundingSphere для игрового объекта
BoundingSphere b = ball.Meshes[0].BoundingSphere;
//Установить центр сферы в соответствии с положением
//игрового объекта
b.Center =avatarPosition;
//Переменная для хранения вектора размера моделиscale;
//Переменная для хранения информации о повороте моделиrotation;
//Переменая для хранения информации о позиции моделиtranslation;
//Цикл обхода объектов сцены
for (int i = 0; i < 75; i++)
{
//Получить BoundingBox для текущего объекта=cls[i].myModel.Meshes[0].BoundingSphere;
//Получить параметры - размер, поворот, позицию для объекта
cls[i].WorldMatrix.Decompose(out scale, out rotation, out translation);
//Установить соответствии с позицией объекта
b1.Center = translation;
//Если сферы игрового объекта и текущего объекта (b1.Intersects(b))
{
//Возвратим True
return true;
}
} //Если выполняется этот код -
//столкновения не было
//и вернем false
return false;
}
Последний метод отвечающий за построение самой сцены и самого объекта
//Вывод объектов сцены
void DrawScene()
{
Components.Clear();
int i = 0;
//Она немного выше плоскости, которую мы выводим на экран
//для того, чтобы тень была видна
Plane pl1 = new Plane(new Vector3(0, -2f, 0), new Vector3(2, -2f, 1), new Vector3(-1, -2f, -2));
//Вывести кубы, расположенные в пять рядов
//по пять штук в трех уровнях
for (int x = 0; x < 5; x++)
{(int y = 0; y < 3; y++)
{(int z = 0; z < 5; z++)
{
//Добавляем в массив новый объект[i] = new modCls(this, ball2, graphics, pl1);
//Устанавливаем его свойства[i].WorldMatrix = Matrix.CreateTranslation(x * 40, y*3, z * 40);[i].ViewMatrix = viewMatrix;[i].ProjectMatrix = projMatrix;[i].LightDirection = LightDirection;
//Добавляем в коллекцию компонентов
Components .Add (cls[i]);
i++;
}
}
("plane"),graphics,newPlane());">} = new modCls(this, ball, graphics, pl1);.WorldMatrix = Matrix.CreateRotationY(avatarlRotation) * Matrix.CreateTranslation(avatarPosition);.ViewMatrix = viewMatrix;.ProjectMatrix = projMatrix;.LightDirection = LightDirection;.Add(ballObj);= new modCls(this, Content.Load("plane"), graphics, new Plane());
//Настраиваем параметры плоскости
plane.WorldMatrix = Matrix.CreateScale(100) * Matrix.CreateRotationY(MathHelper.ToRadians(90)) *.CreateRotationZ(MathHelper.ToRadians(90)) *.CreateTranslation(80, -2.5f, 80);.ViewMatrix = viewMatrix;.ProjectMatrix = projMatrix;.LightDirection = LightDirection;.Add(plane);
}
}
}
7. Пример использования разработанной системы.
Рис.4. Запуск программы
Рис.5. Изменения освещения сцены, местоположения объекта
Рис.6. Изменения вида камеры
8. Заключение
Были приобретены умения по работе с 3D моделями в 3D maxе и загрузка, с последующей работой, созданной модели в XNA Studio.
Была разработана программа, на платформе Microsoft Vusial С#, реализующая ряд задач. Первая и основная это реализация движения 3D модели. Вторая реализация освещения сцены. Так же изменение вида камеры с третьего на первый и обратно при помощи клавиатуры. Изменения угла обзора камеры, чтобы увидеть больше сцены. И запись всей проделанной работы с моделью в видео файл фомата *.avi.
9. Список литературы
движение модель видео формат
David M. Bourg, Glenn Seeman. AI for Game Developers. - OReilly, 2004 Morrison. Teach yourself Game Programming in 24 hours. - Sams Publishing, 2002 Salen, Eric Zimmerman, Rules of Play: Game Design Fundamentals. - MIT Press, 2004 Franson, 2D Artwork and 3D Modeling for Game Artists. - Premier Press, 2003 Bethke, Game Development and Production - Worldware Publishing, 2003
Горнаков С.Г. Разработка игр под Windows в XNA Game Studio Express. - М.: ДМК Пресс, 2007.
Ламот, Андре. Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации. Пер. с англ. - М.: Издательский дом Вильямс, 2004.
Материалы microsoft.com по XNA
1.