Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ2-v004.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
609.7 Кб
Скачать

4. Схема программы

4.1. Схема работы приложения

Начало

Инициализация программы void Init() Опрос клавиатуры и мыши Пользователь хочет закрыть окно? Конец Вывод кадра void Main()

4.2. Схема данных программы

Пользователь

Операционная система Windows

Устройства ввода

Монитор

Приложение Obj.exe

CObj – класс для хранения 3d модели

Run() – цикл обработки сообщений Windows

struct cmd – буфер клавиатуры

struct bubbles[] - структура, содержащая позицию пузырьков(для аним)

IN_MouseMove();

Key_Event() - обработка движения мыши и нажатий кнопок клавиатуры

Init() – установка начального освещения, позиции камеры, загрузки модели

Main() – отрисовка одного кадра с анимацией

4.3. Схема работы приложения в среде Windows

Начало

Инициализация окна

Выделение памяти

Загрузка модели

Сканирование событий

Событие

Обработка события и вывод кадра

cmd[27]=1?

Конец

4.4. А

Конец

Открытие файла

Конец

файла

Считывание строки файла obj

“v “

“f “

“vn“

“vt“

Грани

Вершины

Нормали

лгоритм загрузки модели obj

Начало

Текстурные коородинаты

Переход на следующую строку

5. Описание программы

5.1. Описание функций и структур программы

В программе используются следующие структуры и данные:

Буфер нажатий кнопок (0-не нажата кнопка, 1-нажата)

char cmd[1024];

Углы поворота

float angles[3];

Позиция камеры

float org[3];

Скорость камеры

float orgspeed[3];

Ускорение камеры

float orgvel[3];

Пузырьки

struct _bubble {

//Координаты

float x,y,z;

//Скорость

float vx,vy,vz;

} bubble[100];

Структуры для математического описания векторов

struct Vector3

{

float m_fVec[3];

Vector3(float * fVec)

{

memcpy(m_fVec, fVec, sizeof(float[3]));

}

};

struct Vector2

{

float m_fVec[2];

Vector2(float * fVec)

{

memcpy(m_fVec, fVec, sizeof(float[2]));

}

};

Структура индексов вершин граней (нужна для отображения через opengl)

struct SObjFace

{

unsigned int m_uiVertIdx[3];

unsigned int m_uiTexCoordIdx[3];

unsigned int m_uiNormalIdx[3];

SObjFace(int * ipData)

{

//Копируем данные в нужном порядке

m_uiVertIdx[0] = ipData[0]-1;

m_uiVertIdx[1] = ipData[1]-1;

m_uiVertIdx[2] = ipData[2]-1;

m_uiTexCoordIdx[0] = ipData[3]-1;

m_uiTexCoordIdx[1] = ipData[4]-1;

m_uiTexCoordIdx[2] = ipData[5]-1;

m_uiNormalIdx[0] = ipData[6]-1;

m_uiNormalIdx[1] = ipData[7]-1;

m_uiNormalIdx[2] = ipData[8]-1;

}

};

В программе используются следующие функции:

Функция обработки движения мыши – используется для поворота камеры

void IN_MouseMove();

Функция, которая обрабатывает нажатия кнопок, вызывается каждый кадр для события нажатия и отпускания кнопок

void Key_Event (int key, int key1, int down, unsigned time);

Функция, обрабатывающая события мыши

void IN_MouseEvent (int mstate);

Функции для перемещения камеры

void forward();

void backword();

void left();

void right();

Вызывается когда окно получает фокус ввода

void IN_ActivateMouse(void);

Вызывается когда окно теряет фокус ввода

void IN_DeactivateMouse (void)

Функция главного цикла программы (отрисовывает 1 кадр)

void Main()

Функция Начальной инициализации ламп, мешей

void Init()

Точка входа в программу (main или WinMain). Основная функция

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

В программе используются следующие классы:

Класс Capp – Класс создания приложения Obj.exe

Функции класса:

void Init() - инициализация приложения

bool CreateWnd() – создание окна Windows заданных размеров

void CreateFnt() – создание шрифта

void Print() – печать строки на экран

void Log() – написать строку в файл

void Destroy() – закрыть приложение

float GetFPS() – получить кол-во кадров в секунду

HWND GetHwnd() – получить указатель окна

void Run() - запустить бесконечный цикл обработки сообщений Windows

Данные класса:

unsigned sys_msg_time; - системное время

unsigned sys_frame_time; - время отображаемого кадра

Класс CImage – Класс загрузки текстур

bool Load() – загрузка изображения

void Bind() - назначить текстуру на обьект

void UnBind() – снять назначение текстуры с обьекта

void VFlip() – перевернуть картинку вертикально

static void ScreenShot(char * szDstFile = "screenshot.tga") – сделать скриншот

Класс Clog – Класс, который позволяет вывести логотип приложения (картинку с надписью «КИРИЛЛ»)

bool Init() – инициализация логотипа

void Write() – вывод логотипа

Класс CTimer – класс замера времени

void Init() – инициализация таймера

float GetFPS() – получение количества кадров в секунду

unsigned int GetMS() – получение количества миллисекунд, прошедших с последнего вызова

float GetSeconds() - получение количества секунд, прошедших с последнего вызова

Класс CWindow – Класс для создания окна (window)

static bool Create() – создание окна

static void Resize() – реализация окна

static void Destroy() – закрытие окна

static void CreateFnt() – создание шрифта

static void Print() – вывод символов на экран

static void BufferSwap() – смена буферов

Класс CModel – Класс загрузки 3d моделей

virtual bool Load() – загружает модель из файла

virtual void Render() – рендеринг модели

Класс CObj – Основной класс

bool Load(const char * szFilename, char *szTexName) – загрузка модели и текстуры

void PartBind() – установка текстуры для всех частиц

void RenderPart() – рендеринг частиц

void Render() – рендеринг обычной модели

void SetSkin() – установление другой текстуры для модели

//Конструктор по умолчанию

CObj() – конструктор по умолчанию

CObj(const char * szFilename, char *szTexName) – конструктор с загрузкой файла модели и текстуры