CSS Map in Irrlicht laden



  • Hi !
    also mein Problem ist es, dass ich mir das tutorial auf der irrlicht seite angeschaut habe, wie man eine quake3 map lädt.
    nun möchte ich aber eine css map laden(*.bsp) und ich bekomme es nicht hin, wenn ich einfach den namen eingebe, anstatt -wie im tutorial- "20kdm2.bsp"

    könnte mir bitte jemand erklären wie ich eine solche map laden kann, dass ich auch darin wie im tutorial mich bewegen kann, also die kamera.

    MFG Mr. BigGeLs



  • Die BSP-Files der Sourceengine haben ein etwas anderes Format als die von Quake. Dementsprechend musst du den Loader anpassen, damit er die Datei richtig einliest.

    http://en.wikipedia.org/wiki/BSP_(file_extension)
    (Der Link geht bis zum Ende der Klammer, die Forensoftware kommt damit nur nicht richtig klar...



  • danke erstmal für die schnelle antwort aber ich habe erst mit irrlicht angefangen und ich habe keine ahnung wie ich den loader anpassen soll.
    könnte mir bitte jemand sagen wie?? oder besser ncoh wie die code zeile dann heisen muss...

    MFG Mr. BigGeLs

    EDIT:

    Hier mal der quellcode:

    #include <irrlicht.h>
    #include <iostream>
    
    using namespace irr;
    
    #ifdef _MSC_VER
    #pragma comment(lib, "Irrlicht.lib")
    #endif
    
    int main()
    {
    	video::E_DRIVER_TYPE driverType;
    
    	printf("Please select the driver you want for this example:\n"\
    		" (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\
    		" (d) Software Renderer\n (e) Burning's Software Renderer\n"\
    		" (f) NullDevice\n (otherKey) exit\n\n");
    
    	char i;
    	std::cin >> i;
    
    	switch(i)
    	{
    		case 'a': driverType = video::EDT_DIRECT3D9;break;
    		case 'b': driverType = video::EDT_DIRECT3D8;break;
    		case 'c': driverType = video::EDT_OPENGL;   break;
    		case 'd': driverType = video::EDT_SOFTWARE; break;
    		case 'e': driverType = video::EDT_BURNINGSVIDEO;break;
    		case 'f': driverType = video::EDT_NULL;     break;
    		default: return 1;
    	}	
    
    	IrrlichtDevice *device =
    		createDevice(driverType, core::dimension2d<s32>(640, 480));
    
    	if (device == 0)
    		return 1; 
    
    	video::IVideoDriver* driver = device->getVideoDriver();
    	scene::ISceneManager* smgr = device->getSceneManager();
    
    	scene::IAnimatedMesh* mesh = smgr->getMesh("de_coliseum.bsp");
    	scene::ISceneNode* node = 0;
    
    	if (mesh)
    		node = smgr->addOctTreeSceneNode(mesh->getMesh(0), 0, -1, 1024);
    
    	if (node)
    		node->setPosition(core::vector3df(-1300,-144,-1249));
    
    	smgr->addCameraSceneNodeFPS();
    
    	device->getCursorControl()->setVisible(false);
    
    	int lastFPS = -1;
    
    	while(device->run())
    	{
    		if (device->isWindowActive())
    		{
    			driver->beginScene(true, true, video::SColor(255,200,200,200));
    			smgr->drawAll();
    			driver->endScene();
    
    			int fps = driver->getFPS();
    
    			if (lastFPS != fps)
    			{
    				core::stringw str = L"Irrlicht Engine - Quake 3 Map example [";
    				str += driver->getName();
    				str += "] FPS:";
    				str += fps;
    
    				device->setWindowCaption(str.c_str());
    				lastFPS = fps;
    			}
    		}
    		else
    			device->yield();
    	}
    
    	device->drop();
    	return 0;
    }
    

    "de_coliseum.bsp" ist die map die ich gerne laden möchte, nur als beispiel gedacht.



  • Maps die du von Spielen laden kannst:
    Half Life 1, Counter Strike 1.6, Quake 3 (IBSP)

    Maps die du nicht von Spielen laden kannst:
    Half Life 2, Counter Strike Source, Half Life 2 (VBSP)

    Hat den einfachen Grund das VBSP-Maps ganz anderes von der Strukturierung her in dem File haben, als ne IBSP-Map.



  • Mr. BigGeLs schrieb:

    danke erstmal für die schnelle antwort aber ich habe erst mit irrlicht angefangen und ich habe keine ahnung wie ich den loader anpassen soll.
    könnte mir bitte jemand sagen wie?? oder besser ncoh wie die code zeile dann heisen muss...

    Der Loader muss halt eine Datei von diesem Format lesen können:
    http://www.geocities.com/cofrdrbob/bspformat.html

    Wie genau die Loader bei Irrlicht aussehen, weiß ich nicht. Und mit einer Codezeile wird es nicht getan sein 😉
    Du musst dir ansehen, wie Irrlicht diesen scene::IAnimatedMesh gerne hätte. Dann schaust du dir das Format der BSP-Dateien an und implementierst den Loader so, dass er die BSPs im richtigen Format in einen scene::IAnimatedMesh einladen kann.

    Ist aber nicht trivial, würd ich meinen.


Anmelden zum Antworten