Learn OGRE3D with Real Code Examples
Updated Nov 24, 2025
Code Sample Descriptions
1
Ogre3D Minimal Scene Example
#include <Ogre.h>
using namespace Ogre;
int main() {
Root* root = new Root();
root->restoreConfig();
RenderWindow* window = root->initialise(true, "Ogre3D Window");
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
Camera* camera = sceneMgr->createCamera("MainCam");
camera->setPosition(Vector3(0, 0, 80));
camera->lookAt(Vector3(0,0,0));
camera->setNearClipDistance(5);
Viewport* vp = window->addViewport(camera);
vp->setBackgroundColour(ColourValue(0,0,0));
Entity* ogreEntity = sceneMgr->createEntity("ogrehead.mesh");
SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(ogreEntity);
root->startRendering();
delete root;
return 0;
}
A minimal Ogre3D C++ example initializing a scene and rendering a single entity.
2
Ogre3D Skybox Example
#include <Ogre.h>
using namespace Ogre;
int main() {
Root* root = new Root();
root->restoreConfig();
RenderWindow* window = root->initialise(true, "Ogre3D Skybox");
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
sceneMgr->setSkyBox(true, "Examples/CloudyNoonSkyBox");
Camera* camera = sceneMgr->createCamera("MainCam");
camera->setPosition(Vector3(0,50,200));
camera->lookAt(Vector3(0,0,0));
Viewport* vp = window->addViewport(camera);
vp->setBackgroundColour(ColourValue(0.5f,0.5f,0.5f));
root->startRendering();
delete root;
return 0;
}
Sets a skybox in the Ogre3D scene.
3
Ogre3D Light Example
#include <Ogre.h>
using namespace Ogre;
int main() {
Root* root = new Root();
root->restoreConfig();
RenderWindow* window = root->initialise(true, "Ogre3D Light");
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
Camera* camera = sceneMgr->createCamera("MainCam");
camera->setPosition(Vector3(0,50,150));
camera->lookAt(Vector3(0,0,0));
Viewport* vp = window->addViewport(camera);
vp->setBackgroundColour(ColourValue(0,0,0));
Light* light = sceneMgr->createLight("MainLight");
light->setType(Light::LT_POINT);
light->setPosition(Vector3(0,150,250));
root->startRendering();
delete root;
return 0;
}
Adds a point light to the scene.
4
Ogre3D Animating Entity Example
#include <Ogre.h>
using namespace Ogre;
int main() {
Root* root = new Root();
root->restoreConfig();
RenderWindow* window = root->initialise(true, "Ogre3D Animation");
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
Entity* entity = sceneMgr->createEntity("robot.mesh");
SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(entity);
AnimationState* animState = entity->getAnimationState("Walk");
animState->setEnabled(true);
Camera* camera = sceneMgr->createCamera("MainCam");
camera->setPosition(Vector3(0,100,200));
camera->lookAt(Vector3(0,0,0));
Viewport* vp = window->addViewport(camera);
while(true) {
animState->addTime(0.01f);
root->renderOneFrame();
}
delete root;
return 0;
}
Animates an entity using an Ogre3D animation state.
5
Ogre3D Terrain Example
#include <Ogre.h>
using namespace Ogre;
int main() {
Root* root = new Root();
root->restoreConfig();
RenderWindow* window = root->initialise(true, "Ogre3D Terrain");
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
sceneMgr->setAmbientLight(ColourValue(0.5f,0.5f,0.5f));
TerrainGroup* terrainGroup = new TerrainGroup(sceneMgr, Terrain::ALIGN_X_Z, 513, 1200.0f);
terrainGroup->loadAllTerrains(true);
Camera* camera = sceneMgr->createCamera("MainCam");
camera->setPosition(Vector3(0,150,300));
camera->lookAt(Vector3(0,0,0));
Viewport* vp = window->addViewport(camera);
root->startRendering();
delete root;
return 0;
}
Creates a basic terrain in Ogre3D.
6
Ogre3D Particle System Example
#include <Ogre.h>
using namespace Ogre;
int main() {
Root* root = new Root();
root->restoreConfig();
RenderWindow* window = root->initialise(true, "Ogre3D Particles");
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
Entity* ogreEntity = sceneMgr->createEntity("ogrehead.mesh");
SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(ogreEntity);
ParticleSystem* ps = sceneMgr->createParticleSystem("Smoke", "Examples/Smoke");
node->attachObject(ps);
Camera* camera = sceneMgr->createCamera("MainCam");
camera->setPosition(Vector3(0,50,200));
camera->lookAt(Vector3(0,0,0));
Viewport* vp = window->addViewport(camera);
root->startRendering();
delete root;
return 0;
}
Adds a particle system to the scene.
7
Ogre3D Shadow Example
#include <Ogre.h>
using namespace Ogre;
int main() {
Root* root = new Root();
root->restoreConfig();
RenderWindow* window = root->initialise(true, "Ogre3D Shadows");
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
sceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_MODULATIVE);
Entity* entity = sceneMgr->createEntity("ogrehead.mesh");
SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(entity);
Light* light = sceneMgr->createLight("MainLight");
light->setType(Light::LT_DIRECTIONAL);
light->setDirection(Vector3(-1,-1,0));
Camera* camera = sceneMgr->createCamera("MainCam");
camera->setPosition(Vector3(0,50,200));
camera->lookAt(Vector3(0,0,0));
Viewport* vp = window->addViewport(camera);
root->startRendering();
delete root;
return 0;
}
Enables basic shadows for a scene entity.
8
Ogre3D Camera Orbit Example
#include <Ogre.h>
using namespace Ogre;
int main() {
Root* root = new Root();
root->restoreConfig();
RenderWindow* window = root->initialise(true, "Ogre3D Orbit");
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
Entity* entity = sceneMgr->createEntity("ogrehead.mesh");
SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(entity);
Camera* camera = sceneMgr->createCamera("MainCam");
Viewport* vp = window->addViewport(camera);
float angle = 0.0f;
while(true) {
angle += 0.01f;
camera->setPosition(Vector3(200*std::cos(angle),50,200*std::sin(angle)));
camera->lookAt(Vector3(0,0,0));
root->renderOneFrame();
}
delete root;
return 0;
}
Orbits the camera around an entity.
9
Ogre3D Multiple Entities Example
#include <Ogre.h>
using namespace Ogre;
int main() {
Root* root = new Root();
root->restoreConfig();
RenderWindow* window = root->initialise(true, "Ogre3D Multiple Entities");
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
for(int i=0;i<5;i++) {
Entity* entity = sceneMgr->createEntity("ogrehead.mesh");
SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode(Vector3(i*50,0,0));
node->attachObject(entity);
}
Camera* camera = sceneMgr->createCamera("MainCam");
camera->setPosition(Vector3(0,50,200));
camera->lookAt(Vector3(0,0,0));
Viewport* vp = window->addViewport(camera);
root->startRendering();
delete root;
return 0;
}
Adds multiple entities to the scene.