Войти
ПрограммированиеСтатьи

OGRE 3D. Для начинающих.

Внимание! Этот документ ещё не опубликован.

Автор:

    Существует немало бесплатных игровых движков. Но из них по-настоящему хороший и легкий в освоении найти бывает довольно сложно. Но я все же нашел отличное решение. Это бесплатный движок с открытым кодом OGRE 3D. У него есть довольно много достоинств. Например, нормальная работа с DX9. Движок выдает весьма неплохую картинку и легко расширяем. Достаточно лишь написать простой плагин, дающий необходимые функции. Вот пример плагина:

/*
-----------------------------------------------------------------------------
This source file is part of OGRE
    (Object-oriented Graphics Rendering Engine)
For the latest info, see http://www.ogre3d.org/

Copyright (c) 2000-2009 Torus Knot Software Ltd
Also see acknowledgements in Readme.html

You may use this sample code for anything you like, it is not covered by the
same license as the rest of the engine.
-----------------------------------------------------------------------------
*/

#ifndef _CompositorDemo_H_
#define _CompositorDemo_H_

#include "OgreConfigFile.h"
#include "OgreStringConverter.h"
#include "OgreException.h"

#include "SdkSample.h"
#include "SamplePlugin.h"

using namespace Ogre;
using namespace OgreBites;

#define COMPOSITORS_PER_PAGE 8

class _OgreSampleClassExport Sample_Compositor : public SdkSample
{
public:
  Sample_Compositor();

    void setupContent(void);
    void cleanupContent(void);

  bool frameRenderingQueued(const FrameEvent& evt);
  
  void checkBoxToggled(OgreBites::CheckBox * box);
  void buttonHit(OgreBites::Button* button);        
  void itemSelected(OgreBites::SelectMenu* menu);

protected:
  
  void setupView(void);
  void setupControls(void);
    void setupScene(void);
    void createEffects(void);
  void createTextures(void);

  void registerCompositors();
  void changePage(size_t pageNum);
  
  SceneNode * mSpinny;
  StringVector mCompositorNames;
  size_t mActiveCompositorPage;
  size_t mNumCompositorPages;  

  String mDebugCompositorName;
  SelectMenu* mDebugTextureSelectMenu;
  TextureUnitState* mDebugTextureTUS;

};


#endif  // end _CompositorDemo_H_

Это один из примеров к движку. Т.е. можно легко подключить к движку DirectX 10/11 или супер-пупер навороченый скриптовый движок. Если заинтересовало - быстрее на официальный сайт. Так же на Gamedev.ru есть статья по сборке движка. И еще. Рекомендую скачать OGRE ApplicationWizard. Ссылку можно взять здесь.
      Если вы скачали все, что нужно, приступим к делу. Создайте проект через скачанный визард. Должно получиться что-то вроде этого:

/*
-----------------------------------------------------------------------------
Filename:    BaseApplication.h
-----------------------------------------------------------------------------


This source file is generated by the
   ___                   _              __    __ _                  _ 
  /___\__ _ _ __ ___    /_\  _ __  _ __/ / /\ \ (_)______ _ _ __ __| |
 //  // _` | '__/ _ \  //_\\| '_ \| '_ \ \/  \/ / |_  / _` | '__/ _` |
/ \_// (_| | | |  __/ /  _  \ |_) | |_) \  /\  /| |/ / (_| | | | (_| |
\___/ \__, |_|  \___| \_/ \_/ .__/| .__/ \/  \/ |_/___\__,_|_|  \__,_|
      |___/                 |_|   |_|                                 
      Ogre 1.7.x Application Wizard for VC10 (August 2010)
      http://code.google.com/p/ogreappwizards/
-----------------------------------------------------------------------------
*/
#ifndef __BaseApplication_h_
#define __BaseApplication_h_

#include <OgreCamera.h>
#include <OgreEntity.h>
#include <OgreLogManager.h>
#include <OgreRoot.h>
#include <OgreViewport.h>
#include <OgreSceneManager.h>
#include <OgreRenderWindow.h>
#include <OgreConfigFile.h>

#include <OISEvents.h>
#include <OISInputManager.h>
#include <OISKeyboard.h>
#include <OISMouse.h>

#include <SdkTrays.h>
#include <SdkCameraMan.h>

class BaseApplication : public Ogre::FrameListener, public Ogre::WindowEventListener, public OIS::KeyListener, public OIS::MouseListener, OgreBites::SdkTrayListener
{
public:
    BaseApplication(void);
    virtual ~BaseApplication(void);
  Ogre::Root* getRoot()
  {
    return mRoot.get()
  }

  Ogre::SceneManager* getMgr()
  {
    return mSceneMgr;
  }

  Ogre::RenderWindow* getWnd()
  {
    return mWindow;
  }

  OIS::Mouse* getMouse()
  {
    return mMouse;
  }

    virtual void go(void);

protected:
    virtual bool setup();
    virtual bool configure(void);
    virtual void chooseSceneManager(void);
    virtual void createCamera(void);
    virtual void createFrameListener(void);
    virtual void createScene(void) = 0; // Override me!
    virtual void destroyScene(void);
    virtual void createViewports(void);
    virtual void setupResources(void);
    virtual void createResourceListener(void);
    virtual void loadResources(void);
  Ogre::SceneManager* getSceneManager(){return mSceneMgr;};

    // Ogre::FrameListener
    virtual bool frameRenderingQueued(const Ogre::FrameEvent& evt);

    // OIS::KeyListener
    virtual bool keyPressed( const OIS::KeyEvent &arg );
    virtual bool keyReleased( const OIS::KeyEvent &arg );
    // OIS::MouseListener
    virtual bool mouseMoved( const OIS::MouseEvent &arg );
    virtual bool mousePressed( const OIS::MouseEvent &arg, OIS::MouseButtonID id );
    virtual bool mouseReleased( const OIS::MouseEvent &arg, OIS::MouseButtonID id );

    // Ogre::WindowEventListener
    //Adjust mouse clipping area
    virtual void windowResized(Ogre::RenderWindow* rw);
    //Unattach OIS before window shutdown (very important under Linux)
    virtual void windowClosed(Ogre::RenderWindow* rw);

    Ogre::Root *mRoot;
    Ogre::Camera* mCamera;
    Ogre::SceneManager* mSceneMgr;
    Ogre::RenderWindow* mWindow;
    Ogre::String mResourcesCfg;
    Ogre::String mPluginsCfg;
  Ogre::SceneNode* camNode;
  Ogre::SceneNode* wepNode;
  Ogre::Entity* weapon;

    // OgreBites
    OgreBites::SdkTrayManager* mTrayMgr;
    OgreBites::SdkCameraMan* mCameraMan;     // basic camera controller
    OgreBites::ParamsPanel* mDetailsPanel;   // sample details panel
  OgreBites::Widget* Prizel; // cursor
    bool mCursorWasVisible;                  // was cursor visible before dialog appeared
    bool mShutDown;

    //OIS Input devices
    OIS::InputManager* mInputManager;
    OIS::Mouse*    mMouse;
    OIS::Keyboard* mKeyboard;
  Ogre::Entity* weap;
  Ogre::SceneNode* wnode;
};

#endif // #ifndef __BaseApplication_h_

Если у вас результат другой(а он по-любому другой), помните: я уже немного отредактировал этот файл.

#Ogre3D, #движок

6 ноября 2010