Авторизация

Голосование

Какие разделы наполнять в первую очередь?
 
Ogre3D Начало PDF
Автор: ~Steep~   
23.04.2009 16:13

Попытаюсь описать процесс написания простейшего приложения на графическом движке Ogre3D. Настроим среду Visual C++ для работу с OGRE. Создадим простой 3-д объект, добавим свет и окружение

Приступаем к работе!

 

Ogre3D Начало

 

Для начала необходимо скачать движок OGRE, скачивать нужно ту версию SDK, которая подходит для вашей среды программирования (около 50 мегабайт), либо компилировать из исходников.

Я опишу процесс создания для Visual Studio 2008 (9 версия) и OgreSDK 1.6.0_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

 

+ 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



Вот так выглядит окошко с настройками:

 

Опции проекта

 



Использование шаблона

 

Теперь приступим непосредствено к программированию. Откроем файл *.cpp, который для примера мы назвали OgreAppSource,теперь возьмем простенький шаблон, чтобы упростить себе задачу и вставим его в проект

 

#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;

}



После копирования шаблона можно приступать к программированию. Необходимо чтобы наш объект находился где то.. Прорисовывать все стороны света не нужно для этого есть свой инструмент.

  • SkyBox - Камера и объекты как бы находяться внутри большого куба, на плоскостях которого с внутренней стороны натянуты текстуры. Всего текстур 6. ( для тех кто делал карты в CS про Skybox объяснять не нужно :) )
  • SkyDome - Почти SkyBox только закругленный сверху, а снизу без дна. ( Обязательно нужно ландшавт или что-то вроде него )
  • SkyPlane - небо как панель: быстро рисуеться, но закрывать надо как низ, так и бока ;)

 

// Создаем космический SkyBox из примеров

mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");



Теперь опишем общий свет применяемый в программе:

// Общий свет, его цвет и тип используемых теней

mSceneMgr->setAmbientLight( ColourValue( 0, 0, 0 ) );

mSceneMgr->setShadowTechnique( SHADOWTYPE_STENCIL_ADDITIVE );



Теперь загрузим стандартную модель из Ogre:

// Загрузка модели из файла 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

Добавляем источник света, для того чтобы все не было черным :)

// Создание источника света с именем 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.

 

Уже 17 исправление :) надеюсь последнее ;)

Обновлено 10.01.2010 04:47
 
sape

Разное