Aktuelle Zeit: 12.05.2025, 23:15

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: IRR-Scene mit Kollision
BeitragVerfasst: 06.07.2009, 20:04 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Hiho, ich hab zwar schon was dazu gefunden allerdings verstehe ich das nicht so ganz.

Ich möchte eine IRR-Scene Datei laden (*.irr) und dieser Szene anschliessend Kollision zuweisen.

In dem Tutorial dazu wird einfach jeder Node aus dem Scenemanager mit einem TriangleSelector versehen welche dann alle in einen MetaTriangleSelector kommen. Allerdings will ich nicht alle Objekte die durch den Scenemanager geladen wurden mit Kollision versehen sondern nur die Nodes von der Irr Datei... oder habe ich da was falsch verstanden?

Danke für eine Antwort.

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: IRR-Scene mit Kollision
BeitragVerfasst: 07.07.2009, 23:28 
Offline

Registriert: 11.08.2008, 22:14
Beiträge: 17
Wenn ich dich jetzt ganz richtig verstanden habe lädst du eine .irr-Datei und möchtest die Objekte daraus zur Kollisionskontrolle hinzufügen und andere Objekte nicht?
Das einzige was mir dann dazu einfallen würde, wäre entweder, die Datei zuerst zu laden, sämtliche Nodes daraus zur Kollision hinzuzufügen und dann erst alles andere zu laden.
Falls das aus irgendeinem Grund nicht möglich ist, wäre eine andere Möglichkeit, vor dem Laden der Datei alle bereits vorhanden Nodes in einer Liste bzw. einem Array zu speichern, dann die Datei zu laden, wieder und dann nur solche Nodes zu Kollision hinzuzufügen die neu hinzugekommen sind.
Also frei nach Tutorial 15:
Code:
// Alle Nodes vorher speichern
core::array<scene::ISceneNode *> nodesPrev;
smgr->getSceneNodesFromType(scene::ESNT_ANY, nodesPrev);
// Szene laden
smgr->loadScene("../../media/example.irr");
// Alle Nodes (mit geladener Szene) speichern
core::array<scene::ISceneNode *> nodesNew;
smgr->getSceneNodesFromType(scene::ESNT_ANY, nodesNew);

for (u32 i=0; i < nodesNew.size(); ++i)
{
        scene::ISceneNode * node = nodesNew[i];
        //Prüfen ob Node schon vorher existierte
        bool equalsPrev = false;
        for (u32 j=0; j < nodesPrev.size(); ++j)
        {
                if (node == nodesPrev[j])
                {
                        equalsPrev = true;
                        break;
                }
        }
        if (!equalsPrev)
        {
                scene::ITriangleSelector * selector = 0;

                switch(node->getType())
                {
                case scene::ESNT_CUBE:
                case scene::ESNT_ANIMATED_MESH:
                        // Because the selector won't animate with the mesh,
                        // and is only being used for camera collision, we'll just use an approximate
                        // bounding box instead of ((scene::IAnimatedMeshSceneNode*)node)->getMesh(0)
                        selector = smgr->createTriangleSelectorFromBoundingBox(node);
                       break;

                case scene::ESNT_MESH:
                case scene::ESNT_SPHERE: // Derived from IMeshSceneNode
                         selector = smgr->createTriangleSelector(((scene::IMeshSceneNode*)node)->getMesh(), node);
                         break;

                case scene::ESNT_TERRAIN:
                         selector = smgr->createTerrainTriangleSelector((scene::ITerrainSceneNode*)node);
                          break;

                case scene::ESNT_OCT_TREE:
                          selector = smgr->createOctTreeTriangleSelector(((scene::IMeshSceneNode*)node)->getMesh(), node);
                          break;

                default:
                           // Don't create a selector for this node type
                           break;
                }

                if(selector)
                {
                           // Add it to the meta selector, which will take a reference to it
                           meta->addTriangleSelector(selector);
                           // And drop my reference to it, so that the meta selector owns it.
                           selector->drop();
                }

        }

}


Mehr kann ich dazu jetzt nicht sagen, da ich mit .irr-Dateien bisher noch nicht gearbeitet habe. Das wäre halt jetzt was ich machen würde, ich kann mir aber vorstellen, dass das Performancemäßig nicht unbedingt das Beste ist, je nachdem wieviel Nodes in der Szene bestehen kann die Prüfung auf Neuheit ja mehrere Ewigkeiten dauern.... Für kleine Szenen sollte es aber durchaus praktikabel sein..


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: IRR-Scene mit Kollision
BeitragVerfasst: 08.07.2009, 00:45 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Ah danke, ich habs jetzt so gelöst dass ich einfach die Szene am Anfang Lade, und dann danach die anderen Objekte. Vielen dank für die Hilfe :)

_________________
Bild


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de