2. Руководство пользователя. 3




Скачать 139.71 Kb.
Название2. Руководство пользователя. 3
Дата публикации18.03.2013
Размер139.71 Kb.
ТипРуководство пользователя
odtdocs.ru > Право > Руководство пользователя
СПбГУ Информационных Технологий, Механики и Оптики

 

 

 

 

 

 

 

 

 

 

 

Мультимедиа технологии

 

Лабораторная работа №1
 

 

 

 

 

 

 

 

 

Выполнили:

Студенты КТиУ

Группы 5110

Малыгин Михаил,

Федорова Мария

 
 

 

 

 

 

 

 

 

 

Санкт-Петербург

2010

  

Оглавление

1Постановка задачи 2

2. Руководство пользователя. 3

1.1Экран игры: 3

1.2Очки, еда 3

1.3Управление 4

1.4Туман 4

1.5Поставка 4

1.6Дополнительные настройки 4

1Запуск из командной строки: 4

2Режимы запуска: 5

2Описание структуры приложения 5

1Диаграмма классов 5

2Основные классы приложения: 5

IDrawable - абстрактный класс, определяющий методы рисования объектов игры 5

Movable – реализует IDrawable, определяет методы движение и поворота 5

Packman и Enemy 6

Labyrinth 7

Food 7

Texture,Интерполяция цветов(Blending) 8

Туман 9

1Постановка задачи


Написание игры 3D-Пакман с демонстрацией следующих возможностей OpenGL:

  1. Использование 3-х мерных матричных преобразований.

  2. Освещение.

  3. Текстурирование с использованием текстурных объектов.

  4. Построение геометрических фигур из базовых примитивов (GL_LINES, GL_TRIANGLES и т.п.).

  5. Туман.

  6. Смешивание цветов (Blending)

Позиционирование задания к лаб работе как макета игры, предполагало что будут минимум 2 персонажа — собственно pacman за которого играет пользователь и привидение — ИИ. Соответственно pacman управляется с клавиатуры. Классическая версия игры pacman также предполагает наличие лабиринта, и еды — которую поглощает pacman. Цель игры — съесть всю еду, при этом вас преследует привидение.

В ходе тестирования макета, были дополнительно высказаны следующие пожелания:

  • полномаштабный режим

  • демонстрация очков,

  • передача параметров через коммандную строку.

В качестве исходной точки было взято следующее изображение 3d pacmana



2. Руководство пользователя.

1.1Экран игры:






Враг



Pacman


1.2Очки, еда


  • Еда, при поглощении еды прибавляются очки.

screenshot 2010-04-21 00:11


Очки отображаются с обеих сторон игрового поля





1.3Управление


    Управление осуществляется клавишами вверх(вперед), вниз(назад), влево(влево), право(право). При изменении направления движения Pacman поворачивается (управление при этом не изменяется) :

1.4
Туман


Правой клавишей мыши включается туман, левой он выключается:




1.5Поставка


Чтобы скачать игру(предполагается наличие svn client, например tigris):

svn checkout http://packman-3d.googlecode.com/svn/trunk/ packman-3d-read-only
Игра поставляется для 2х платформ Mac OS X (10.6.2 и выше) , а также дополнительно для Windows7 – запуск из Visual Studio 2008 (в поставку входит файл проекта)

Игра распространяется по лицензии Apache License 2.0 , исходники - Google Code/Pacman3d. Там же есть Wiki, содержащая некоторые полезные сведения для разработчиков.

Запуск из командной строки(Pacman3d — директория проекта):

    cd /Pacman3d/Lab3D/Lab3d/build/Debug

./Lab3D

1.6Дополнительные настройки

1Запуск из командной строки:


    cd /Pacman3d/Lab3D/Lab3d/build/Debug

    ./Lab3D

2Режимы запуска:


    ./Lab3D -f полноэкранный режим

./Lab3D -w 800 600 размеры окна –w width height

./Lab3D -f 1024x768:32@60 32 - разрядность цветов 60 - частота развертки монитора

2Описание структуры приложения

1Диаграмма классов

2
^ Основные классы приложения:

IDrawable - абстрактный класс, определяющий методы рисования объектов игры

#pragma once
class IDrawable {

public:

virtual ~IDrawable(void);

virtual void draw(void) = 0;

virtual void step(void);

};

Movableреализует IDrawable, определяет методы движение и поворота

    Здесь задана скорость движения VELOCITY 0.5f, и задается перечисление направлений движения (enum Movement), по умолчанию(0) объект не движется - M_STOP = 0.

#define VELOCITY 0.5f
enum Movement{

^ M_STOP = 0,

M_LEFT,

M_RIGHT,

M_FORWARD,

M_BACKWARD

};

  • Movable в конструкторе передается указатель на лабиринт и первоначальное положение - position, скорость движения - velocity.

    Movable(Point position, float velocity, Labyrinth* labyrinth),

  • соответственно при пошаговом движении virtual void step(void);



//было ли изменено положение объекта или его можно просто отрисовать

if(mDirty) {

mPosition = mLabyrinth->movePoint(mPosition, mVelocity);

mVelocity = p(0,0);

}

mDirty = false;
Собственно движение – перерисование объекта на новом месте:
void Movable::draw(void)

{

// сохраняем текущие координаты в стеке

glPushMatrix(); {

//сдвигаем начало координат

glTranslatef(mPosition.x, mPosition.y, 0);

//перерисовываем объект в новом положении

drawCustom();

}

//возвращаемся к предыдущим координатам

glPopMatrix();

}
^ Packman и Enemy

От класса Movable наследуются все движущиеся персонажи игры – т/е Packman и Enemy. Они переопределяют метод drawCustom()
В классе Enemy так же реализован простейший ИИ для погони за Pacmanом :
void Enemy::step(void) {

Point pacmanPos = mPackman->getPosition();

Point pos = this->getPosition();

//ИИ для погони за пакманом

if(!mPackman->isKilled()){

if(fabs(pacmanPos.x - pos.x) < 1 && fabs(pacmanPos.y - pos.y) < 1){

mPackman->kill();

}

}

if(!mPackman->isKilled()){

if (pacmanPos.x < pos.x && canMove(p(-cAbsVelocity, 0))) {

setMovement(M_LEFT);

mDirty = true;

}else if(pacmanPos.x > pos.x && canMove(p(cAbsVelocity, 0))){

setMovement(M_RIGHT);

mDirty = true;

}else if(pacmanPos.y < pos.y && canMove(p(0, -cAbsVelocity))){

setMovement(M_FORWARD);

mDirty = true;

}else if(pacmanPos.y > pos.y && canMove(p(0, cAbsVelocity))){

setMovement(M_BACKWARD);

mDirty = true;

}

}

Movable::step();

}
Таким образом, враг всегда движется в направлении пэкмана если ему не препятствует лабиринт(Enemy::canMove). При достижении Pacmanа, враг его убивает (mPackman->kill()) , Pacman уменьшается и исчезает с экрана.

Labyrinth

Лабиринт задается состоит из набора клеток. Клетка может содержать стену, пакмана, врага или быть пустой.

Карта лабиринта задается в виде двухмерного массива 23 на 23 в файле Labyrinth.cpp.

static short map[maxX][maxY] = {

/*y*/

{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//

/*x*/ {1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1},//

{1,0,.......

Ненулевое значение в массиве означает, что в данной клетке находится стена.

При передвижении объекта по лабиринту происходит проверка возможности перемещения объекта (т.е. отсутствие стены) в указанном направлении.

Для отрисовки лабиринта происходит процесс преобразования карты в массив векторов, в Labyrinth::Labyrinth(void)

std::vector *elements;

каждый из которых соответствует одной стене. Далее каждый вектор (стена) отображается в виде цилиндра в Labyrinth::draw() - gluCylinder(quadObj, 0.25, 0.25, elem.getLength(), 15, 15)
Food

class Food : public IDrawable{
Point mPosition;

bool mIsEaten;

public:

Food(Point position);

Point getPosition(void);

virtual void draw(void);

bool isEaten(void);

void eat(void);

};

  • еда, не перерисовывается если уже съедена (bool mIsEaten;) :

    void Food::draw(void)

{

if(mIsEaten) return;

…..
Texture,Интерполяция цветов(Blending)

  • класс скрывающий загрузку текстур

    // load a RGB .RAW file as a texture

GLuint Texture::loadTextureRAW( const char * filename, int wrap, int width, int height)
применение:

enemyTex = (new Texture("svbbbdi4.raw", 0, 545 , 494))->texture;

далее

//разрешаем использование текстур

glEnable( GL_TEXTURE_2D );

//приязываем загруженную картинку к текстуре(делаем ее активной)

glBindTexture(GL_TEXTURE_2D, enemyTex);
Далее мы можем устанавливать различные параметры наложения текстуры на объект

// select modulate to mix texture with color for shading

//режим смешивания цвета текстуры с цветом объекта Decal - цвет объекта не учитывается..

glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);


//Ground.draw

/*Когда вы создаете многоугольник,

вы можете задать цвет для каждой его вершины.

Если разрешено сглаживание цветов

glShadeModel(GL_SMOOTH);

то многоугольник будет переливаться.*/

glColor4d(1,0.4,0, 0.7);

// сопоставляет координаты текстуры вершинам четырехугольника.

glTexCoord2d(0.0,0.0);

glVertex2d(-ground_size,-ground_size);

Туман

Управление туманом происходит в файле main.cpp

инициализация int main(int argc, char **argv):

//Туман

//цвет тумана

float fogcolor[4] = {0.5,0.5,0.5,1};

//плотность тумана

density = 0.01;

glGetFloatv(GL_FOG_DENSITY,&density);

glFogfv(GL_FOG_COLOR, fogcolor);

//установим его режим

glFogi(GL_FOG_MODE, GL_LINEAR);

glHint (GL_FOG_HINT, GL_NICEST);

//Тут мы устанавливаем расстояние от нашей камеры,

//на котором будет начинатся дым

glFogf(GL_FOG_START, 10.0f);

glFogf(GL_FOG_END, 20.0f);
При нажатии правой клавиши мыши glutMouseFunc(mouse);

//разрешаем туман

glEnable(GL_FOG);

//запрещаем туман

glDisable(GL_FOG);

Добавить документ в свой блог или на сайт

Похожие:

Система управления хостингом руководство пользователя
Документ содержит сведения о назначении, области применения и основных функциях программ. В документе описываются условия, необходимые...

Руководство пользователя Москва, 2012
Данное руководство может распространяться только согласно условиям, изложенным в лицензии Open Publication License, версии 0 или...

Моделирование стохастических и детерминированных систем: Руководство...
...

Моделирование стохастических и детерминированных систем: Руководство...
Гайдышев И. П. Моделирование стохастических и детерминированных систем: Руководство пользователя программы AtteStat. – Курган

Моделирование стохастических и детерминированных систем: Руководство...
Гайдышев И. П. Моделирование стохастических и детерминированных систем: Руководство пользователя программы AtteStat. – Курган

Система тестирования «Обработка работоспособности человека при выполнении...
В данном документе будет подробно описан интерфейс пользователя по выбору и прохождению теста, а также интерфейс администратора для...

Руководство пользователя приложения Каури iСклад с поддержкой 1с версии 2 "Управление торговлей"

Руководство пользователя Linux Mint 10 «Julia»
Активируйте плагин последних документов

2 Руководство пользователя 11
Функция перечисления внутренних спецификационных ссылок спецификационного типа 34

Руководство пользователя
Он представляет собой комплексную систему для автоматизации гостиничного обслуживания

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
odtdocs.ru
Главная страница