Problem mit der Irrlicht engine!



  • Hallo! Momentan habe ich wieder angefangen mit der Irrlicht-Engine zu arbeiten, nachdem ich vorher schon (mit einem entsprechenden Wrapper) in einer anderen Programmiersprache damit gearbeitetet habe.
    Leider gibts direkt schon schwierigkeiten.
    Ich habe Beispielcode versucht zu kompilieren, welches zwar machbar ist, sich aber dann mit einem "ABC.exe funktioniert nicht mehr" verabschiedet.

    //Einbinden der Header-Datei von Irrlicht
    #include <irrlicht.h>
    
    //Einbinden der Namespaces
    using namespace irr;
    using namespace core;
    using namespace video;
    //Die Hauptprozedur main()
    int main()
    {
            //Unser Irrlicht-Device erstellen und initialisieren
            IrrlichtDevice *device =
                    createDevice( EDT_DIRECT3D9, dimension2d<u32>(1024, 768), 32,
                            false, false, false, 0);
    
            //Konnte das Device erstellt werden ?
            if (!device)
                    return 1; //Falls nicht, Fehlercode zurückgeben und Programm abbrechen
    
            //Den Text des Hauptfensters festlegen
            device->setWindowCaption(L"Das Koordinatensystem");
    
            //Den Videotreiber erstellen und Zeiger aus dem Device abholen
            IVideoDriver* driver = device->getVideoDriver();
    
            //Ein Material deklarieren
            SMaterial mat;
            //Das Material nimmt kein Licht an
    
            //Während das Device aktiv ist ...
            while(device->run())
            {
                    //Szene beginnen
                    driver->beginScene(true, true, SColor(3,150,203,255));
    
                    driver->setMaterial(mat);
    
                    //Hier wird die Szene gezeichnet (Objekte, Meshes, 2D Bitmaps usw.)
                    //Rote Linie (X-achse)
                    driver->draw3DLine(vector3df(-0.5f, 0, 0), //Startvektor
                                       vector3df(0.5f, 0, 0),  //Schlußvektor
                                       SColor(255,255,0,0));  //Farbwert
                    //Grüne Linie (Y-Achse)
                    driver->draw3DLine(vector3df(0, -0.5f, 0), //Startvektor
                                       core::vector3df(0, 0.5f, 0),  //Schlußvektor
                                       video::SColor(255,0,255,0));  //Farbwert
                    //Blaue Linie (Z-Achse)
                    driver->draw3DLine(core::vector3df(-0.25f, -0.25f, -0.5f), //Startvektor
                                       core::vector3df(0.25f, 0.25f, 0.5f),  //Schlußvektor
                                       video::SColor(255,0,0,255));  //Farbwert
                    //Szene beenden
                    driver->endScene();
            }
            //Das Device freigeben
            device->drop();
    
            //Keinen Fehler zurückgeben
            return 0;
    }
    

    Das ist der gesamte Code, sobald ich

    driver->setMaterial(mat);
    

    weg lasse, läuft das ganze zwar, aber das ist ja auch keine Lösung.

    Ich hab schon überlegt dass es vllt an meiner Hardware / an meinem OS liegen kann, deshalb mal hier mein System:

    Windows 7 Home Premium 64 Bit
    4GB Ram
    Intel i3-2120 @ 3,30 GhZ
    Radeon HD7770

    Hoffe jemand kann mir helfen.



  • Zuerst einmal, was bring es dir, ein Material zu erstellen, bei dem du nichteinmal einstellungen änderst? 😮 kapier ich nicht..
    könnte auch daran liegen, ist aber eher unwarscheinlich, ändere einfach mal ein paar sachen an dem material und teste noch einmal 😉

    Zweitens, versuch doch mal das material als pointer zu erstellen. hatte schon öffters fehler (hab zwar noch nie mit irrlicht gearbeitet aber bei anderen projekten), dass manche klassen nur als pointer richtig weiterverarbeitet werden konnten.

    also:
    SMaterial *mat;



  • Ein defaultkonstruiertes Material sollte kein Problem sein, siehe hier.

    InsoNB, versuche herauszufinden, wo das Programm abstürzt. Ist die gelinkte Irrlicht.lib kompatibel zu deinem Compiler (d.h. mit der gleichen Konfiguration gebaut worden)?

    gamer8o4 schrieb:

    Zweitens, versuch doch mal das material als pointer zu erstellen.

    Nein, tu das nicht. Damit handelst du dir nur manuelle Speicherverwaltung und die damit verbundenen Probleme ein.

    gamer8o4 schrieb:

    hatte schon öffters fehler [...], dass manche klassen nur als pointer richtig weiterverarbeitet werden konnten.

    Wäre vielleicht eine gute Idee gewesen, dem auf den Grund zu gehen. Zeiger lösen nicht auf magische Weise Probleme 😉



  • wo ihr hier grad bei pointern seid: irrlicht will ja ziemlich einfach und auch sicher sein. d.h. es soll der speicher von irrlicht verwaltet bzw freigegeben werden (angeblich)

    aber sehe ich das richtig, dass irrlicht an jeder stelle rohe pointer hin und her schiebt?

    und was bringt das drop und grab?
    genau das müsste doch eigentlich den pointer releasen bzw den referenz counter erhöhen



  • Skym0sh0 schrieb:

    aber sehe ich das richtig, dass irrlicht an jeder stelle rohe pointer hin und her schiebt?

    Ja, aber rohe Pointer != manuelle Speicherverwaltung. Die meisten Zeiger gehören den Irrlicht-Klassen.

    Skym0sh0 schrieb:

    wo ihr hier grad bei pointern seid: irrlicht will ja ziemlich einfach und auch sicher sein. d.h. es soll der speicher von irrlicht verwaltet bzw freigegeben werden (angeblich)

    Nein, man muss teilweise manuelles Reference-Counting verwenden. grab() erhöht den Counter, drop() erniedrigt ihn.


Anmelden zum Antworten