Problema con Orgre3D

Haz aquí tus consultas relacionadas con la programación gráfica.
Responder
Mensaje
Autor
cazagavilan
Mensajes: 75
Registrado: 14/04/2011 11:04 pm

Problema con Orgre3D

#1 Mensaje por cazagavilan » 04/06/2012 6:24 am

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: Seleccionar todo

#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!

cazagavilan
Mensajes: 75
Registrado: 14/04/2011 11:04 pm

#2 Mensaje por cazagavilan » 04/06/2012 6:32 am

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.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado