Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Ogre3D > FAQ

FAQ Туториалы, статьи, переводы документации

Ответ
 
Опции темы
Старый 15.02.2012, 15:25   #1
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Сообщение Вариант создания поведения для объекта

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

Для начала создайте пустой консольный проект в Mizrosoft Visual C++ Express.
Добавьте файл main.cpp и напишите функцию входа в приложение.
int main()
{
return 
0;

У нас готова программа которая ничего не делает. Теперь пропишите пути к Огру. В моем случае, я залез в свойства проеката, там настроил каталоги заголовочных файлов D:\OGRE\include; D:\OGRE\boost_1_42. Потом выставил каталоги библиотек D:\OGRE\lib\debug; D:\OGRE\boost_1_42\lib
Теперь нужно включить файлы Огра. в начале функции main напишем:

#include <OGRE\ExampleApplication.h>

#pragma comment(lib,"OgreMain_d.lib")
#pragma comment(lib,"OIS_d.lib") 
Это была настройка проекта.

И последнее, что нужно сделать это создать класс приложения огра.

class Game : public ExampleApplication
{
public:
void createScene()
{
}

теперь запустим класс Огра в методе main



int main()
{
Game game//новые строки
game.go();

return 
0;



Можете скомпилировать проект и положить exe файл в каталог bin\debug в каталоге с Ogre3D, я сделал проще, я в настройках отладки установил рабочий каталог D:\OGRE\bin\debug. Будет просто черное окно. Теперь взгляните на класс игрового объекта:

class CBeast : public Ogre::FrameListener
{
public:
Ogre::Entitybody;
Ogre::SceneNodenode;
Ogre::AnimationStatecurrentAnimation;
CBeast(Ogre::SceneManager *mSceneMgr) : Ogre::FrameListener()
{
body mSceneMgr->createEntity("beast.mesh");
body->setCastShadows(true);
node mSceneMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(body);
node->pitch(Ogre::Degree(90));
Ogre::Root::getSingletonPtr()->addFrameListener(this);
node->setPosition(0,80,0);
currentAnimation body->getAnimationState("run");
currentAnimation->setEnabled(true);
currentAnimation->setLoop(true);
}

bool frameStarted(const Ogre::FrameEvent &evt)
{
currentAnimation->addTime(evt.timeSinceLastFrame);
return 
true;
}
}; 


Пояснения.
Я создал класс унаследованный от Ogre::FrameListener, я это сделал затем, что бы объект мог что то делать, а не просто тупо существовать на сцене. body, node, currentAnimation - это вспомогательные переменные, которые будут использоваться внутри класса. Конструктор в качестве параметра принимает менеджер сцены на котором мы хотим расположить игровой объект. Далее в конструкторе я создаю и настраиваю объект. И вот самое интересное - это функция frameStarted(). В этой функции и нужно описывать поведение объекта. В моем случае я сделал играть анимацию.

Теперь чтобы создать объект, нужно в main классе написать следующее:

CBeastbeast = new CBeast(mSceneMgr); 
Теперь на сцене появится зверь, который будет бегать =) Ура. Если нам нужен еще один бегающий зверь, еще раз пишем эту строку

CBeastbeast2 = new CBeast(mSceneMgr); 
Далее создаем свет тени и т.д. компилируем и наслаждаемся.
Полный код
#include <OGRE\ExampleApplication.h>

#pragma comment(lib,"OgreMain_d.lib")
#pragma comment(lib,"OIS_d.lib")

class CBeast : public Ogre::FrameListener
{
public:
Ogre::Entitybody;
Ogre::SceneNodenode;
Ogre::AnimationStatecurrentAnimation;
CBeast(Ogre::SceneManager *mSceneMgr) : Ogre::FrameListener()
{
body mSceneMgr->createEntity("beast.mesh");
body->setCastShadows(true);
node mSceneMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(body);
node->pitch(Ogre::Degree(90));
Ogre::Root::getSingletonPtr()->addFrameListener(this);
node->setPosition(0,80,0);
currentAnimation body->getAnimationState("run");
currentAnimation->setEnabled(true);
currentAnimation->setLoop(true);
}

bool frameStarted(const Ogre::FrameEvent &evt)
{
currentAnimation->addTime(evt.timeSinceLastFrame);
return 
true;
}
};

class 
Game : public ExampleApplication
{
public:
void createScene()
{

Ogre::Entityground1_ent mSceneMgr->createEntity("ground1.mesh");
Ogre::SceneNodeground1 mSceneMgr->getRootSceneNode()->createChildSceneNode();
ground1->attachObject(ground1_ent);
ground1_ent->setCastShadows(false);

CBeastbeast = new CBeast(mSceneMgr);

mSceneMgr->setAmbientLightColourValue(0.350.350.35) );
mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);
Ogre::LightmSunLight mSceneMgr->createLight("Sun");
mSunLight->setType(Light::LT_DIRECTIONAL);
mSunLight->setDiffuseColour(1.01.01.0);
mSunLight->setSpecularColour(1.01.01.0);
mSunLight->setDirection(Vector3(0, -0.5f0.5f));

}
};


int main()
{
Game game;
game.go();
return 
0;

Оригинал статьи: http://malcdevelop.ru/index.php/ogre...ya-dlya-obekta
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо pozitiffcat за это полезное сообщение:
DRAG (24.07.2012), HolyDel (15.02.2012), johnk (07.03.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:33.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com