Обзор существующих решений


Скачать 0.66 Mb.
Название Обзор существующих решений
страница 7/10
Тип Обзор
rykovodstvo.ru > Руководство эксплуатация > Обзор
1   2   3   4   5   6   7   8   9   10


Приложения


Приложение А



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

Программа для запуска приложения расположена в папке Demo и называется Present3D.exe. Для корректной работы программы, во время её старта из выпадающего списка нужно выбрать графическую библиотеку для рендера DirectX. В случае если на машине не установлена данная библиотека, в папке Demo приложен файл для установки dxwebsetup.exe.

Разработка и загрузка собственных 3D моделей.

Для разработки моделей потребуется Blender 2.66. После разработки анимации у 3D модели, обязательно нужно назвать анимацию Walk.

После разработки 3D моделей, требуется настроить экспортер для использования моделей в движке. В папке с приложением находится файл io_export_ogreDotScene.py, который нужно переместить в расположение C:\Program Files\Blender\2.66\scripts\addons. После перемещения нужно зайти в Blender и активировать данный скрипт, для этого выполнить действия:

  • Перейти в User Preferences

  • Открыть вкладку Addons

  • Найти в списке OGRE Exporter и активировать галочку на этом скрипте

Экспорт модели проводится в меню File > Export > Ogre3D (.scene and .mesh), затем нужно выбрать директорию для сохранения файла.

Следующие файлы создаются при экспорте модели из Blender:

  • .mesh – основной файл модели

  • .material – файл материала (если материал применялся)

  • .skeleton – файл анимации (если модель имеет анимацию)

Все такие файлы после экспорта требуется упаковать в zip архив и переместить в папку с приложением по пути Demo/media/packs.

После перемещения архива с моделью требуется добавить в конфигурационный файл resources.cfg путь к созданной модели в таком виде Zip=media/packs/NameModel.zip

На месте NameModel должно быть такое имя модели, которое содержит расширение .mesh в архиве.

Для добавления описания в виде текста к модели, нужно создать текстовый файл с названием, которое содержит расширение .mesh в архиве, и поместить в расположение Demo\media\text.

Работа с программой.

При запуске программы перед пользователем появляются созданные им модели. При выборе модели мышкой, камера подлетает к модели и затем появляется информационный текст о модели, а также анимация модели, если она существует. Для того, чтобы вернуться на исходную позицию камеры, нужно нажать кнопку «Вернуться». Кнопка «Остановить камеру» включает режим свободного манипулирования камерой при помощью мыши и кнопок WASD.

Меню настроек.

В меню настроек можно манипулировать моделями, для этого требуется перейти в меню настроек, выделить мышкой модель и с помощью кнопок манипулирования можно перемещать модель в пространстве и разворачивать вокруг своей оси.

Приложение Б



Программный код
BasicApp.h
#ifndef BASICAPP_H

#define BASICAPP_H
#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include
#include

#include

#include

#include
#include

#include
#include
#include

#include

#include
#include "textMgr.h"

#include

#include

#include
class BasicApp

: public Ogre::WindowEventListener,

public Ogre::FrameListener,

public OIS::KeyListener,

public OIS::MouseListener

{

public:

BasicApp();

~BasicApp();
void go();
private:

bool mShutdown;
//Setup - Main

Ogre::Root* mRoot;

Ogre::Camera* mCamera;

Ogre::SceneManager* mSceneMgr;

Ogre::RenderWindow* mWindow;

Ogre::String mResourcesCfg;

Ogre::String mPluginsCfg;

OgreBites::SdkCameraMan* mCameraMan;

Ogre::SceneNode* lNode;//записываем подгружаемые меши

Ogre::Entity* room;

Ogre::SceneNode* roomNode;

Ogre::AnimationState* anim;
//Setup - Render

virtual bool frameRenderingQueued(const Ogre::FrameEvent& fe);
//Setup - Keyboard

virtual bool keyPressed(const OIS::KeyEvent& ke);

virtual bool keyReleased(const OIS::KeyEvent& ke);
float mRotSpd;

bool mMovableFound;

bool mLMouseDown, mRMouseDown;
Ogre::Vector3 prevPositionModel;
//Setup - Mouse

virtual bool mouseMoved(const OIS::MouseEvent& me);

virtual bool mousePressed(const OIS::MouseEvent& me, OIS::MouseButtonID id);

virtual bool mouseReleased(const OIS::MouseEvent& me, OIS::MouseButtonID id);
//Setup - Window

virtual void windowResized(Ogre::RenderWindow* rw);

virtual void windowClosed(Ogre::RenderWindow* rw);
//Setup - application

bool setup();

bool configure();

void chooseSceneManager();

void createCamera();

void createScene();

void destroyScene();

void createFrameListener();

void createViewports();

void setupResources();

void createResourceListener();

void loadResources();
// CEGUI

CEGUI::OgreRenderer* mRenderer;

bool setupCEGUI();
// OIS

OIS::Mouse* mMouse;

OIS::Keyboard* mKeyboard;

OIS::InputManager* mInputMgr;
//Terrain

Ogre::TerrainGroup* mTerrainGroup;

Ogre::TerrainGlobalOptions* mTerrainGlobals;
//Setup - Scene

Ogre::RaySceneQuery* mRayScnQuery;//луч, опрашиваемый сцену

bool goDefaultPosition;//останавливает камеру при нажатии

void handleCameraCollision();
//GUI - Buttons

CEGUI::Window *buttonCameraSetPosition;//возвращения камеры на позицию

CEGUI::Window *buttonQuit;//выход

CEGUI::Window* textbox1;//текст для модели

CEGUI::Window* textShadow;

CEGUI::Window* menuButton; //меню настроек

CEGUI::Window* scalePlusButton; //увеличение скейла

CEGUI::Window* scaleMinusButton; //уменьшение скейла

CEGUI::Window* translateModelToLeftButton; //модельку влево

CEGUI::Window* translateModelToRightButton; //модельку вправо

CEGUI::Window* translateModelToTopButton; //модельку вперёд

CEGUI::Window* translateModelToBackButton; //модельку назад

CEGUI::Window* translateModelToUpButton; //модельку вверх

CEGUI::Window* translateModelToDownButton; //модельку вниз

CEGUI::Window* rotateRightModelButton; //поворачиваем модельку вправо

CEGUI::Window* rotateLeftModelButton; //поворачиваем модельку влево

CEGUI::Window* backMainWindowButton;//назад из меню настроек на главную

CEGUI::Window* checkShadow;

CEGUI::Window* releaseCamera;

CEGUI::Window* tipsText;

CEGUI::Window* tipsSettingText;

CEGUI::Window* tipsRoomText;

CEGUI::Window* tipsObjectText;
CEGUI::Window* scaleRoomPlusButton; //увеличение скейла

CEGUI::Window* scaleRoomMinusButton; //уменьшение скейла
//GUI - Subscribes buttons

void eventRoomScalePlus();

void eventRoomScaleMinus();

void eventModelScalePlus();

void eventModelScaleMinus();

void eventModelTranslateLeft();

void eventModelTranslateRight();

void eventModelTranslateTop();

void eventModelTranslateBack();

void eventModelTranslateUp();

void eventModelTranslateDown();

void eventModelRotateRight();

void eventModelRotateLeft();

bool eventMenuButton(const CEGUI::EventArgs &e);

bool quit(const CEGUI::EventArgs &e);//обработчик кнопки выхода

bool setDefaultPosition(const CEGUI::EventArgs &e);//обработчик кнопки cameraDefaultPosition

bool eventBackWindow(const CEGUI::EventArgs &e);//обработчик кнопки backMainWindow
void checkShadows();
//Timers

Ogre::Timer timer1;

Ogre::Timer timer2;
//Work with text model
std::vector myVector; //вектор названий мешей в конфиге

char result[100]; //выходное название меша

CEGUI::String encodeRussian(wchar_t string[100]); //декодируем в русский текст
//Inside classes & SDK

textMgr* textManager;

TiXmlDocument *file_settings;

TiXmlDocument *file_room_settings;
//GUI - Alpha

void goInAlpha(CEGUI::Window* win); //функция ухода в альфу

void goFromAlpha(CEGUI::Window* win); //функция выхода из альфы

bool goFromAlphaButton;//если моделька выделена, вытаскиваем кнопку из альфы
//GUI - Widgets

CEGUI::Window* sheetMgr;//менеджер виджетов

CEGUI::Window *sheetMainWindow;//виджет главного окна

CEGUI::Window *sheetMainMenu;//виджет меню настроек
//Setup - XML setting

void configureXmlSettings();

void removeFromXmlElderData();

void configureXmlSettingsD(const char * nameModel, Ogre::Vector3 &locationVector, Ogre::Vector3 &scaleVector, double &rotate, Ogre::Vector3 &scaleRoomVector);

bool tipsEnabled;

};
#endif
BasicApp.cpp
#include "BasicApp.h"


BasicApp::BasicApp()

: mShutdown(false),

mRoot(0),

mCamera(0),

mSceneMgr(0),

mWindow(0),

mResourcesCfg(Ogre::StringUtil::BLANK),

mPluginsCfg(Ogre::StringUtil::BLANK),

mCameraMan(0),

mRenderer(0),

mMouse(0),

mKeyboard(0),

mInputMgr(0),

mTerrainGroup(0),

mTerrainGlobals(0),

mRotSpd(0.1),

mLMouseDown(false),

mRMouseDown(false),

mRayScnQuery(0),

goDefaultPosition(false),

goFromAlphaButton(false),

sheetMainWindow(0),

textManager(0),

sheetMainMenu(0),

sheetMgr(0)
{

myVector.clear();

file_settings = new TiXmlDocument("modelSettings.xml");

file_room_settings = new TiXmlDocument("settings.xml");

}

BasicApp::~BasicApp()

{

if (mCameraMan) delete mCameraMan;
mSceneMgr->destroyQuery(mRayScnQuery);
Ogre::WindowEventUtilities::removeWindowEventListener(mWindow, this);

windowClosed(mWindow);
delete mRoot;

}
void BasicApp::go()

{

#ifdef _DEBUG

mResourcesCfg = "resources_d.cfg";

mPluginsCfg = "plugins_d.cfg";

#else

mResourcesCfg = "resources.cfg";

mPluginsCfg = "plugins.cfg";

#endif
if (!setup())

return;
mRoot->startRendering();
destroyScene();

}
bool BasicApp::frameRenderingQueued(const Ogre::FrameEvent& fe)

{

if (mKeyboard->isKeyDown(OIS::KC_ESCAPE))

mShutdown = true;
if (mShutdown)

return false;
if (mWindow->isClosed())

return false;
mKeyboard->capture();

mMouse->capture();
mCameraMan->frameRenderingQueued(fe);
eventRoomScalePlus();

eventRoomScaleMinus();

eventModelScalePlus();

eventModelScaleMinus();

eventModelTranslateLeft();

eventModelTranslateRight();

eventModelTranslateTop();

eventModelTranslateBack();

eventModelTranslateUp();

eventModelTranslateDown();

eventModelRotateRight();

eventModelRotateLeft();
checkShadows();


for(int i = 0; i < myVector.size(); i++)

{

//если активно главное окно и выделена моделька

if ( mSceneMgr->getSceneNode(myVector[i])->getShowBoundingBox() && sheetMainWindow->isActive() )

{

Ogre::Vector3 needPosition = mSceneMgr->getSceneNode(myVector[i])->getPosition() + Ogre::Vector3(200,50,50);

mCamera->move( (needPosition - mCamera->getPosition() ) * fe.timeSinceLastFrame );

mCamera->lookAt(mSceneMgr->getSceneNode(myVector[i])->getPosition() + Ogre::Vector3(0,50,50) );

textbox1->setVisible(true);
prevPositionModel = mSceneMgr->getSceneNode(myVector[i])->getPosition();
tipsEnabled = false;
wchar_t cameraText[100] = L"Вернуться";

buttonCameraSetPosition->setText( encodeRussian(cameraText) );


if (mSceneMgr->getEntity(myVector[i])->hasAnimationState("Walk"))

{

anim = mSceneMgr->getEntity(myVector[i])->getAnimationState("Walk");

anim->setLoop(true);

anim->setEnabled(true);

anim->addTime(fe.timeSinceLastFrame);

}
}

}

if (goDefaultPosition)

{

Ogre::Vector3 needPosition(500, 350, 150);

mCamera->move( (needPosition - mCamera->getPosition() ) * fe.timeSinceLastFrame );

mCamera->lookAt(prevPositionModel);

wchar_t cameraText[100] = L"Остановить камеру";

buttonCameraSetPosition->setText( encodeRussian(cameraText) );
for(int i = 0; i < myVector.size(); i++)

{

if ( mSceneMgr->getSceneNode(myVector[i])->getShowBoundingBox() && mSceneMgr->getEntity(myVector[i])->hasAnimationState("Walk"))

{

anim->setEnabled(false);

}

}

}
tipsText->setVisible(tipsEnabled);
CEGUI::System::getSingleton().injectTimePulse(fe.timeSinceLastFrame);

return true;

}

void BasicApp::eventRoomScalePlus()

{
if (static_cast(scaleRoomPlusButton)->isPushed() )

{

Ogre::Real needScaleX = roomNode->getScale().x * 1.001f;

Ogre::Real needScaleY = roomNode->getScale().y;

Ogre::Real needScaleZ = roomNode->getScale().z * 1.001f;
roomNode->setScale(needScaleX, needScaleY, needScaleZ);

}
}
void BasicApp::eventRoomScaleMinus()

{
if (static_cast(scaleRoomMinusButton)->isPushed() )

{

Ogre::Real needScaleX = roomNode->getScale().x * 0.999f;

Ogre::Real needScaleY = roomNode->getScale().y;

Ogre::Real needScaleZ = roomNode->getScale().z * 0.999f;
roomNode->setScale(needScaleX, needScaleY, needScaleZ);

}
}
void BasicApp::eventModelScalePlus()

{

for(int i = 0; i < myVector.size(); i++)

{

if ( mSceneMgr->getSceneNode(myVector[i])->getShowBoundingBox() && static_cast(scalePlusButton)->isPushed() )

{

Ogre::Vector3 needScale = mSceneMgr->getSceneNode(myVector[i])->getScale() * 1.001f; //костыль на скейл

mSceneMgr->getSceneNode(myVector[i])->setScale(needScale);

}

}

}
void BasicApp::eventModelScaleMinus()

{

for(int i = 0; i < myVector.size(); i++)

{

if ( mSceneMgr->getSceneNode(myVector[i])->getShowBoundingBox() && static_cast(scaleMinusButton)->isPushed() )
1   2   3   4   5   6   7   8   9   10

Похожие:

Обзор существующих решений icon Описание предметной области
Обзор существующих программных продуктов систем обработки данных c использованием ip-телефонии 7
Обзор существующих решений icon Метода очистки
Целью настоящей работы является разработка технических решений по усовершенствованию существующих методов зачистки резервуаров с...
Обзор существующих решений icon Генеральный план совмещенный с проектом планировки пояснительная...
Выявление проблем градостроительного развития территории поселения на основе анализа параметров городской среды, существующих ресурсов...
Обзор существующих решений icon Обзор
Оспаривание решений и действий (бездействия) органов государственной власти, органов местного самоуправления, должностных лиц, государственных...
Обзор существующих решений icon Экспериментальная медицина и детская неврология обзор
Системный обзор вмешательств у детей с церебральным параличом: статус доказательности
Обзор существующих решений icon «Выполнение работ по развитию и оказание услуг по сопровождению Федерального...
Целью работы является анализ справочников фргу на соответствие следующим критериям: актуальность и полнота существующих справочных...
Обзор существующих решений icon Теоретические основы анализа и планирования разработки управленческих решений 5
Методы планирования, используемые при разработке и принятии управленческих решений в организации 9
Обзор существующих решений icon Обзор текущего состояния и особенности государственной инновационной политики
Периодический обзор инновационной деятельности стран Европы, Америки, Азии и Африки, СНГ
Обзор существующих решений icon Методические указания Ростов-на-Дону
Целью данного курса является формирование представления о процессе принятия решений, навыков анализа ситуации при принятии решений,...
Обзор существующих решений icon Экспериментальное народное самолетостроение 2 Глава Предварительный анализ и выбор решений 2
«летающих решений», некоего ковра-самолета «небесного катера» для отдыха и путешествий, не требующего летных удостоверений и сертификации....
Обзор существующих решений icon Марка Сергеева государственные и муниципальные библиотеки иркутской...
Г 72 ежегод аналит обзор / Иркут обл гос универс науч б-ка им. И. И. Молчанова-Сибирского
Обзор существующих решений icon Решение это выбор альтернативы
Чтобы оказать вам помощь в этом, ниже мы рассмотрим типы решений, принимаемых управляющими, используемые способы, научные методы...
Обзор существующих решений icon 2 Анализ выполнения решений международных документов/решений, принятых...
На Рис. 133 наглядно представлена оценка Азербайджанской республики с точки зрения реализации основных направлений Плана действий...
Обзор существующих решений icon Учебное пособие. М.: Издательство "Март", 2004. Предыдущая
Моделирование как метод теории принятия решений и анализ ряда конкретных моделей предмет четвертой части. Приводятся методы принятия...
Обзор существующих решений icon Рабочая программа учебной дисциплины б. 3 Методы принятия управленческих...
Будущий менеджер должен научиться правильно применять готовые компьютерные программы, хорошо разработанную технику анализа количественных...
Обзор существующих решений icon Инструкция по эксплуатации на английском языке
Когда то я уже писал обзор на проектор Unic uc40 и когда увидел BlitzWolf (он же unic uc46) то решил взять его на обзор, что бы посмотреть...

Руководство, инструкция по применению




При копировании материала укажите ссылку © 2024
контакты
rykovodstvo.ru
Поиск