- Note
- see Guide to building OGRE for instructions how to build OGRE itself
CMake Configuration
Ogre uses CMake as its build system. It is recommended that you use it in your project as well.
Then all you need is to add the following lines to your project
find_package(OGRE 1.11 REQUIRED COMPONENTS Bites RTShaderSystem)
file(COPY ${OGRE_CONFIG_DIR}/resources.cfg DESTINATION ${CMAKE_BINARY_DIR})
These settings include all available components and third party libraries OGRE depends on (e.g. boost) - nothing more to do.
If you installed OGRE in a non-standard path, you will have to set OGRE_DIR to the location of OGREConfig.cmake so find_package can figure out the rest.
For inspecting the detected OGRE installation, the following CMake variables are available
OGRE_STATIC - whether ogre was build as static lib
OGRE_${COMPONENT}_FOUND - ${COMPONENT} is available
OGRE_PLUGIN_DIR - The directory where the OGRE plugins are located
OGRE_MEDIA_DIR - The directory where the OGRE sample media is located
OGRE_CONFIG_DIR - The directory where the OGRE config files are located
Application skeleton
The easiest way to get started is the OgreBites Component. It handles Ogre startup/ tear down (including Ogre::Overlay, RTSS), input using SDL2 and even includes a Simple GUI System.
This is useful if all you want is to get a Scene with a FPS counter up and running (rapid prototyping). If available it also uses SDL2 for input - you now just have to implement the callbacks.
To use it, simply derive from OgreBites::ApplicationContext and if you want to get input events from OgreBites::InputListener
{
...
}
Base class responsible for setting up a common context for applications.
Definition: OgreApplicationContext.h:88
in the constructor we set our application name. The ogre configuration files will be stored in a system dependant location specific to our app.
MyTestApp::MyTestApp() :
OgreBites::ApplicationContext(
"OgreTutorialApp")
{
}
Definition: OgreAdvancedRenderControls.h:40
to handle input events, we then override the according method
{
{
getRoot()->queueEndRendering();
}
return true;
}
@ SDLK_ESCAPE
Definition: OgreInput.h:91
Definition: OgreInput.h:50
Keysym keysym
Definition: OgreInput.h:52
Keycode sym
Definition: OgreInput.h:46
the interesting part however is the setup method
void MyTestApp::setup(void)
{
addInputListener(this);
getRenderWindow()->addViewport(cam);
}
A viewpoint from which the scene will be rendered.
Definition: OgreCamera.h:81
void setAutoAspectRatio(bool autoratio)
If set to true a viewport that owns this frustum will be able to recalculate the aspect ratio wheneve...
Defines an instance of a discrete, movable object based on a Mesh.
Definition: OgreEntity.h:81
void setNearClipDistance(Real nearDist)
Sets the position of the near clipping plane.
Representation of a dynamic light source in the scene.
Definition: OgreLight.h:71
void setPosition(const Vector3 &pos)
Sets the position of the node relative to it's parent.
@ TS_PARENT
Transform is relative to the space of the parent node.
Definition: OgreNode.h:66
Shader generator system main interface.
Definition: OgreShaderGenerator.h:56
void addSceneManager(SceneManager *sceneMgr)
Add a scene manager to the shader generator scene managers list.
static ShaderGenerator * getSingletonPtr()
Get the singleton instance.
The root class of the Ogre system.
Definition: OgreRoot.h:65
SceneManager * createSceneManager()
create a default scene manager
Definition: OgreRoot.h:375
Manages the organisation and rendering of a 'scene' i.e.
Definition: OgreSceneManager.h:139
SceneNode * getRootSceneNode(void)
Gets the SceneNode at the root of the scene hierarchy.
Entity * createEntity(const String &entityName, const String &meshName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Create an Entity (instance of a discrete mesh).
virtual Light * createLight(const String &name)
Creates a light for use in the scene.
virtual Camera * createCamera(const String &name)
Creates a camera to be managed by this scene manager.
Class representing a node in the scene graph.
Definition: OgreSceneNode.h:58
virtual SceneNode * createChildSceneNode(const Vector3 &translate=Vector3::ZERO, const Quaternion &rotate=Quaternion::IDENTITY)
Creates an unnamed new SceneNode as a child of this node.
virtual void attachObject(MovableObject *obj)
Adds an instance of a scene object to this node.
void lookAt(const Vector3 &targetPoint, TransformSpace relativeTo, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
Points the local -Z direction of this node at a point in space.
virtual void setup()
Sets up the context after configuration.
- Note
- The above code is explained in detail in Your First Scene.
finally we start everything as
int main(int argc, char *argv[])
{
MyTestApp app;
app.initApp();
app.getRoot()->startRendering();
app.closeApp();
return 0;
}
- Note
- You can find the full code of the above example at
Samples/Tutorials/Bootstrap.cpp for C++
Samples/Python/bites_sample.py for Python
Samples/AndroidJNI/MainActivity.java for Java (Android)
OgreBites itself is also a good starting point if you need more control over the Camera or the Window creation. For instance to render into an existing Qt Window.
- See also
- Ogre::FileSystemLayer::getConfigFilePath
-
Ogre::Root::renderOneFrame
-
Ogre::RenderSystem::_createRenderWindow
-
Ogre::RenderSystem::preExtraThreadsStarted