Работа с 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.