/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema con Orgre3D

 
      Índice del Foro elrincondelc.com -> Gráficos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
cazagavilan



Registrado: 14 Abr 2011
Mensajes: 75

MensajePublicado: 04/06/2012 6:24 am
Título: Problema con Orgre3D

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...

Código:
#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;
}


Gracias!
Volver arriba
cazagavilan



Registrado: 14 Abr 2011
Mensajes: 75

MensajePublicado: 04/06/2012 6:32 am
Título:

Este es el error grave...
Excepción no controlada en 0x5e303e21 en EsqueletoOgre.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0xcccccd0c.
Volver arriba
      Índice del Foro elrincondelc.com -> Gráficos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com