Aktuelle Zeit: 05.01.2025, 07:53

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit Bounding Box
BeitragVerfasst: 11.05.2010, 20:03 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Hallo,

ich lade eine IrrEdit Szene in welcher sich ein Node befindet, der einen selbsterstellten Node als child hat, welcher angibt dass es sich bei diesem (dem Parent von dem selbsterstellten node) Node um ein Item handelt. Nun lasse ich nach dem Laden der Szene alle Nodes durchgehen, suche den markierten node und übergebe die Informationen (Mesh, Größe, Rotation usw.) des Nodes an mein Itemsystem, welches die Items verwaltet. Beim verwalten der Items gehört auch eine Kollision, welche mit Boundingboxen überprüft wird dazu. Mein Problem ist nun: wenn ich die Items manuell in das Itemsystem einfüge (also ohne suchen und kopieren der Node informationen) dann funktioniert die Kollision perfekt. Aber bei automatisch eingefügten Nodes wird nie eine Kollision festgestellt. Ich denke dass dort irgendwie die Bounding box nicht vorhanden oder falsch positioniert ist.

Hier mal der Code von der Kollisionsabfrage:

Code:
if(itemnode->getTransformedBoundingBox().intersectsWithBox(kameranode->getTransformedBoundingBox()))


Und hier wird jeder Node der geladenen Szene durchgegangen und kontrolliert, falls es sich um ein ItemNode (den marker) handelt wird der Parent als Item in das Itemsystem eingefügt und das geschieht hier:
(i_node ist der marker für den Parent node, dass dieser ein item ist und tmp_node ist der Parent node von i_node)
Code:
case (ESCENE_NODE_TYPE)MAKE_IRR_ID('i','m','s','n'):

                        CItemSceneNode* i_node=dynamic_cast<CItemSceneNode*>(node);
                        ISceneNode* tmp_node=i_node->getParent();

                        addItem(tmp_node->getName());
                        setItemNode(tmp_node->getName(),(IMeshSceneNode*)tmp_node);
                        setItemMesh(tmp_node->getName(),((IMeshSceneNode*)tmp_node)->getMesh());
                        setItemPosition(tmp_node->getName(),tmp_node->getPosition());
                        setItemScale(tmp_node->getName(),tmp_node->getScale());                    setItemRotation(tmp_node->getName(),tmp_node->getRotation());
                        setItemType(tmp_node->getName(),i_node->getItemType());
                        setItemValue(tmp_node->getName(),i_node->getItemValue());


Falls noch mehr code benötigt wird, einfach sagen.

Danke für eine Antwort.

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Problem mit Bounding Box
BeitragVerfasst: 12.05.2010, 06:21 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
Also ich seh jetzt kein Problem an der Stelle, vielleicht würde es helfen, wenn du die ganzen Werte mal auf die Konsole ausgibst. Ich benutz sowas ähnliches (für die Checkpoints in meinem Stunt Marble Racers Spiel). Ich speicher nicht die Attribute des Parent Nodes, sondern nur eine Referenz und hol mir dann bei der Abfrage jeweils die benötigten Werte direkt aus dem Objekt. Ich denke, dass die Routine zum Laden einer Szene die Werte nicht sofort updated, könnte also (imho) solche Probleme geben, wenn du die Werte zu früh abfrägst.

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Problem mit Bounding Box
BeitragVerfasst: 12.05.2010, 16:44 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Die Werte sind alle korrekt, an denen liegt es nicht. Einziges Problem ist dass die Kollisionsabfrage nicht funktioniert, was ich aber nicht verstehe weil der Node an seine richtigen Position ist und mit setDebugDataVisible(EDS_BBOX) auch eine Boundingbox um das Objekt gezeichnet wird, so wie es sein soll...

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Problem mit Bounding Box
BeitragVerfasst: 16.05.2010, 10:34 
Offline

Registriert: 12.09.2008, 21:41
Beiträge: 187
Wohnort: Deutschland
Hi,

also als erstes würde ich an deiner Stelle mal die beiden Routinen überprüfen. Also zum einen was passiert wenn du den Node automatisch einfügst und wie fügst du den Node manuell ein (den Code kannst du hier auch mal posten, dann können wir das auch vergleichen).

Also Lösung würde sich hier anbieten nicht 2 Codes zu benutzen die das gleiche machen, sondern eine gemeinsame Funktion zu programmieren, die beiden Aufgaben gewachsen ist. Dann ist so ein Fehler beinahe unmöglich...

MfG
Scarabol

_________________
My Toolbox:
- Irrlicht 1.7.1
- Blender 2.49a
- Microsoft Visual C++ Express Edition 2008
- Newton Game Dynamics 2.xx
Regeln zur Programmierung:
Regel 1: Die Programmiersprache hat keine Fehler.
Regel 2: Solltest du doch einen Fehler finden, tritt automatisch Regel 1 in Kraft.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Problem mit Bounding Box
BeitragVerfasst: 16.05.2010, 11:15 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Danke für die Tipps aber ich habe das Problem bereits gefunden. Aus irgendeinem Grund auch immer wurde das Item nicht richtig in die Liste gespeichert, wie es bei einer auflistung der sämtlich erstellten Items sehen konnte. Ich habe das nun so gelöst, dass ich alles innerhalb der Renderfunktion des Item Nodes mache. Ich muss nur noch beim Laden der Szene den Parent ausfindig machen und dies dem Item Node mitteilen, dann wird dort alles intern überprüft und ausgewertet, was bestens funktioniert.

_________________
Bild


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de