Я опишу процесс создания для Visual Studio 2008 (9 версия) и OgreSDK 1.6.5_VC90 я думаю будет работать и на новых версиях, по крайней мере на это надеюсь
Процесс установки OgreSDK не отличаеться от других программ, за той лишь разницей что лучше ставить его в корне - так проще.
Создание нового проекта
Запускаем Visual Studio выбираем: File -> New -> Project или жмем клавиши: ctrl + shift + N.
Выбираем Visual C++ -> Win32 -> Win32 Project
* Называем свой проект в поле Name. Например : OgreApp
* Выбираем папку где будет храниться проект Location. Например H:\ogre\OgreApp
* Убираем галочку Create Directory for Solution
Нажимаем ОК.
Нажимаем Next, ставим галочку на Empy Project. Нажимаем Finish.
У нас создался пустой проект, теперь необходимо создать файл с кодом, для этого кликаем правой клавишой по папке Source Files и выбираем Add -> New Item
В появившемся окошке выбираем тип файла C++ File (*.cpp) зададим имя файла, например OgreAppSource, жмем кнопочку Add. Пока оставим файл пустым, затем здесь будет код нашего приложения.
Настройка проекта на использование Ogre3D
Сейчас нужно его настроить на использование движка Ogre3D, для этого щелкаем правой клавишой по названию проекта (OgreApp) и выбираем пункт Properties (самый последний пункт). Теперь настроим проект
Хотелось бы сразу уточнить, что настройки для разрабатываемой версии (Debug) в пункте Configuration и версии конечной (Release) будут немного различаться, пока будем работать только в Debug
Code
+ Configuration Properties
General
* Output Directory: $(OGRE_HOME)\bin\$(ConfigurationName)
* Intermediate Directory: $(OGRE_HOME)\obj\$(ConfigurationName)
Debugging
* Command: $(OGRE_HOME)\bin\$(ConfigurationName)\$(TargetFileName)
* Working Directory: $(OGRE_HOME)\bin\$(ConfigurationName)
C++
General
* Additional Include Directories: ..\include;$(OGRE_HOME)\include;$(OGRE_HOME)\samples\include
Linker
General
* Additional Library Directories: "$(OGRE_HOME)\lib"
Input
* Additional Dependencies: OgreMain_d.lib OIS_d.lib
Для версии Release используем: OgreMain.lib OIS.lib
General
* Output Directory: $(OGRE_HOME)\bin\$(ConfigurationName)
* Intermediate Directory: $(OGRE_HOME)\obj\$(ConfigurationName)
Debugging
* Command: $(OGRE_HOME)\bin\$(ConfigurationName)\$(TargetFileName)
* Working Directory: $(OGRE_HOME)\bin\$(ConfigurationName)
C++
General
* Additional Include Directories: ..\include;$(OGRE_HOME)\include;$(OGRE_HOME)\samples\include
Linker
General
* Additional Library Directories: "$(OGRE_HOME)\lib"
Input
* Additional Dependencies: OgreMain_d.lib OIS_d.lib
Для версии Release используем: OgreMain.lib OIS.lib
Вот так выглядит окошко с настройками:
Использование шаблона
Теперь приступим непосредствено к программированию. Откроем файл *.cpp, который для примера мы назвали OgreAppSource,теперь возьмем простенький шаблон, чтобы упростить себе задачу и вставим его в проект
Code
#include "ExampleApplication.h"
class TutorialApplication : public ExampleApplication
{
protected:
public:
TutorialApplication()
{
}
~TutorialApplication()
{
}
protected:
void chooseSceneManager(void)
{
// Используем Terrain Менеджер Сцен (для использования карт высот)
mSceneMgr = mRoot->createSceneManager(ST_EXTERIOR_CLOSE);
}
virtual void createCamera(void)
{
// Создаем класс камеры mCamera с именем PlayerCam
mCamera = mSceneMgr->createCamera("PlayerCam");
// Установка позиции (вширь, вверх, вдаль) камеры
mCamera->setPosition(Vector3(300,300,-550));
// Установка позиции направление - куда смотрит камера
mCamera->lookAt(Vector3(0,100,0));
// Настройка дистанции ближней и дальней прорисовки
mCamera->setNearClipDistance(5);
mCamera->setFarClipDistance(1000);
}
virtual void createViewports(void)
{
// Создание вьюпоинта или точки просмотра - с какой камеры выводить на экран. Цвет фона.
Viewport* vp = mWindow->addViewport(mCamera);
vp->setBackgroundColour(ColourValue(0,0,0));
// AspectRatio — это отношение ширины области, на которую выводится изображение, к её высоте.
mCamera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
}
void createScene(void)
{
// Описываем любой загружаемый объект
Entity *ent;
// Описываем любой создаваемый свет
Light *light;
***В этой части будет находиться наш код***
}
};
#if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char **argv)
#endif
{
// Create application object
TutorialApplication app;
try {
app.go();
} catch(Exception& e) {
#if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
fprintf(stderr, "An exception has occurred: %s\n",
e.getFullDescription().c_str());
#endif
}
return 0;
}
class TutorialApplication : public ExampleApplication
{
protected:
public:
TutorialApplication()
{
}
~TutorialApplication()
{
}
protected:
void chooseSceneManager(void)
{
// Используем Terrain Менеджер Сцен (для использования карт высот)
mSceneMgr = mRoot->createSceneManager(ST_EXTERIOR_CLOSE);
}
virtual void createCamera(void)
{
// Создаем класс камеры mCamera с именем PlayerCam
mCamera = mSceneMgr->createCamera("PlayerCam");
// Установка позиции (вширь, вверх, вдаль) камеры
mCamera->setPosition(Vector3(300,300,-550));
// Установка позиции направление - куда смотрит камера
mCamera->lookAt(Vector3(0,100,0));
// Настройка дистанции ближней и дальней прорисовки
mCamera->setNearClipDistance(5);
mCamera->setFarClipDistance(1000);
}
virtual void createViewports(void)
{
// Создание вьюпоинта или точки просмотра - с какой камеры выводить на экран. Цвет фона.
Viewport* vp = mWindow->addViewport(mCamera);
vp->setBackgroundColour(ColourValue(0,0,0));
// AspectRatio — это отношение ширины области, на которую выводится изображение, к её высоте.
mCamera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
}
void createScene(void)
{
// Описываем любой загружаемый объект
Entity *ent;
// Описываем любой создаваемый свет
Light *light;
***В этой части будет находиться наш код***
}
};
#if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char **argv)
#endif
{
// Create application object
TutorialApplication app;
try {
app.go();
} catch(Exception& e) {
#if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
fprintf(stderr, "An exception has occurred: %s\n",
e.getFullDescription().c_str());
#endif
}
return 0;
}
После копирования шаблона можно приступать к программированию. Необходимо чтобы наш объект находился где то.. Прорисовывать все стороны света не нужно для этого есть свой инструмент. * SkyBox - Камера и объекты как бы находяться внутри большого куба, на плоскостях которого с внутренней стороны натянуты текстуры. Всего текстур 6. ( для тех кто делал карты в CS про Skybox объяснять не нужно )
* SkyDome - Почти SkyBox только закругленный сверху, а снизу без дна. ( Обязательно нужно ландшавт или что-то вроде него )
* SkyPlane - небо как панель: быстро рисуеться, но закрывать надо как низ, так и бока
Code
// Создаем космический SkyBox из примеров
mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");
Code
// Общий свет, его цвет и тип используемых теней
mSceneMgr->setAmbientLight( ColourValue( 0, 0, 0 ) );
mSceneMgr->setShadowTechnique( SHADOWTYPE_STENCIL_ADDITIVE );
Code
// Загрузка модели из файла RZR-002.mesh, который находиться в папке OgreSDK\media\models
ent = mSceneMgr->createEntity("model", "RZR-002.mesh");
// Наша модель отображает тень
ent->setCastShadows(true);
// Создаем node объект - объект, который в отличии от Entity можно изменять(размер, положение, поворот)
SceneNode *Nmodel = mSceneMgr->getRootSceneNode()->createChildSceneNode( "NmodelN" );
Nmodel->attachObject( ent );
// Увеличиваем модель в 4-ре раза на каждой оси
Nmodel->scale(4, 4, 4);
// Перемещаем нашу модель выше от центра
Nmodel->setPosition(Vector3(0, 55, 0));
// поворачиваем объект на 120 градусов (крутим вертикальную ось)
Nmodel->yaw(Degree(120));
Если вы хотите добавить свою модель используйте Экспорт в формат Ogre3D Добавляем источник света, для того чтобы все не было черным
Code
// Создание источника света с именем Light1
light = mSceneMgr->createLight("Light1");
// Тип нашего света - точечный
light->setType(Light::LT_POINT);
// Перемещаем наш источник света
light->setPosition(Vector3(0, 300, -250));
// Устанавливаем рассеевающий цвет
light->setDiffuseColour(.9, .9, .9);
// Устанавливаем отраженный цвет
light->setSpecularColour(.7, .7, .7);
Теперь нажимаем F5 - компилируем проект, выбираем необходимые параметры в окне настроек приложения Ogre3D и жмем OK. У нас должен получиться следующий результат:
Ну Вот собственно пока все. Можете скачать исходник OgreApp.
Автор этого замечательного примера не я, а ~Steep~ с сайта http://freestee.ru/
Комментариев нет:
Отправить комментарий