Hola!
Bueno, tengo este código copiado (para después hacer unos ejercicios) y me da error grave... no se si es por que no encuentra los archivos necesarios o no se...
#include <ogre.h>
#include <OIS\OIS.h>
using namespace Ogre;
class ExitListener : public FrameListener
{
public:
ExitListener(OIS::Keyboard*keyboard):mKeyboard(keyboard)
{
}
bool frameStarted(const FrameEvent& evt)
{
mKeyboard->capture();
return !mKeyboard->isKeyDown(OIS::KC_ESCAPE);
}
private:
OIS::Keyboard *mKeyboard;
};
// La clase Application contendra los metodos para inicializar una aplicacion Ogre.
class Application
{
public: // Al invocar al metodo go se realizaran las inicializaciones de los subsistemas en el orden indicado
void go()
{
createRoot();
defineResources();
setupRenderSystem();
createRenderWindow();
initializeResourceGroups();
setupScene();
setupInputSystem();
createFrameListener();
startRenderLoop();
}
~Application()
{
mInputManager->destroyInputObject(mKeyboard);
OIS::InputManager::destroyInputSystem(mInputManager);
delete mListener;
delete mRoot;
}
private:
Root*mRoot;
OIS::Keyboard*mKeyboard;
OIS::InputManager*mInputManager;
ExitListener*mListener;
// El objeto root es el núcleo de Ogre, nada se puede hacer en ogre si previamente no se crea root
void createRoot()
{
mRoot = new Root();
}
void defineResources()
{
String secName, typeName, archName;
ConfigFile cf;
cf.load("resources.cfg");
ConfigFile::SectionIterator seci = cf.getSectionIterator();
while(seci.hasMoreElements())
{
secName = seci.peekNextKey();
ConfigFile::SettingsMultiMap*settings = seci.getNext();
ConfigFile::SettingsMultiMap::iterator i;
for(i=settings->begin(); i!=settings->end(); ++i)
{
typeName = i->first;
archName = i->second;
ResourceGroupManager::getSingleton().addResourceLocation(archName, typeName, secName);
}
}
}
// En este paso se indica aspectos refernetes a la configuracion grafica con la que se va a mostrar la aplicacion
//( OpenGL o DirectX, resolucion, anti aliasing y pantalla completa)
void setupRenderSystem()
{
RenderSystem *rs = mRoot->getRenderSystemByName("Direct3D9 Rendering Subsystem");
mRoot->setRenderSystem(rs);
rs->setConfigOption("Full Screen", "No");
rs->setConfigOption("Video Mode", "800 x 600 @ 32-bit colour");
}
// Crear la ventana principal
void createRenderWindow()
{
mRoot->initialise(true, "tutorial");
}
void initializeResourceGroups()
{
TextureManager::getSingleton().setDefaultNumMipmaps(5);
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
}
// En este apartado es donde se monta la escena: se colocab camaras, luces, objetos, efectos, etc...
void setupScene()
{// Creamos el SceneManager
SceneManager* mSceneMgr = mRoot->createSceneManager(ST_GENERIC, "default Smanager");
// Creamos y configuramos la camara
Camera* cam;
cam = mSceneMgr->createCamera("cámara");
cam->setNearClipDistance(1);
cam->setFarClipDistance(500);
cam->setPosition(150.0, 120.0, 0.0);
cam->lookAt(0.0, 50.0, 0.0);
// Creamos la luz
Light* light = mSceneMgr->createLight("luz1");
light->setType(Light::LT_POINT);
light->setPosition(0, 100, 0);
light->setDiffuseColour(0.4, 0.4, 0.4);
light->setSpecularColour(0.2, 0.3, 0.2);
Viewport *vp = mRoot->getAutoCreatedWindow()->addViewport(cam);
// Luz ambiente
mSceneMgr->setAmbientLight(ColourValue(0.2,0.2,0.2));
// Creamos un objeto
Entity* ent;
ent = mSceneMgr->createEntity("Robot", "robot.mesh");
SceneNode* node = mSceneMgr->getRootSceneNode()->createChildSceneNode("RobotNode");
node->setPosition(0.0,0.0,0.0);
node->attachObject(ent);
}
// Sistema de entrada
void setupInputSystem()
{
size_t windowHnd = 0;
std::ostringstream windowHndStr;
OIS::ParamList pl;
RenderWindow * win = mRoot->getAutoCreatedWindow();
win->getCustomAttribute("WINDOW", &windowHnd);
windowHndStr<<windowHnd;
pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
mInputManager = OIS::InputManager::createInputSystem(pl);
try
{
mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject(OIS::OISKeyboard, false));
}
catch (const OIS::Exception&e)
{
throw Exception(42, e.eText, "Application::setupInputSystem");
}
}
void setupCEGUI()
{
}
// Gestiona los eventos de la ventana principal
void createFrameListener()
{
mListener = new ExitListener(mKeyboard);
mRoot->addFrameListener(mListener);
}
// Bucle de repintdo
void startRenderLoop()
{
mRoot->startRendering();
}
};
int main(int argc, char **argv)
{
try
{
Application app;
app.go();
}
catch(Exception&e)
{
fprintf(stderr, "An exception has ocurred %s\n", e.getFullDescription().c_str());
}
return 0;
}