Aktuelle Zeit: 14.05.2025, 00:15

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 23.08.2008, 17:37 
Offline

Registriert: 09.07.2008, 13:03
Beiträge: 14
Hallo Leute,
Schon als ich vor einigen Jahren mal ein Spielchen programmiert habe, hat mich die Kollsionsdetection in den Wahnsinn getrieben.
Momentan treibt sie mich noch nicht in den Wahnsinn, aber ich verstehe nicht ganz was ich tue.

Ich erstelle ein Terrain mit dem ITerrainSceneNode. Dann lade ich ein Mesh, welches über dieses Terrain fahren soll.
Zuerst wollte ich vom Mesh zum "Boden" eine Line erstellen und den Betrag ausrechnen, je nach dem wie dieser ist, eine Rotation durchführen.
Dann habe ich mir mal den CollisionAnimator näher angesehen. Ich verstehe aber das Prinzip noch nicht so ganz. Und ich komme damit auch nicht zum gesuchten Resultat bzw ich weiß garnicht ob ich mein Vorhaben damit realisieren kann.

Das Mesh welches ich lade heißt "dumper"
Code:
scene::IAnimatedMesh* dumper = smgr->getMesh("media/mdls/dumper.obj");
scene::IAnimatedMeshSceneNode* dumperNode = smgr->addAnimatedMeshSceneNode(dumper);
scene::IMesh * dumperIMesh = dumper->getMesh(0);     //Wozu??


Dann hab ich probiert einen TriangleSelector zum Mesh hinzuzufügen(fürs Terrain existiert auch einer):

Code:
scene::ITriangleSelector * dumperSelector = smgr->createTriangleSelector(dumper, dumperNode);


So und jetzt muss ich ja irgendwie den Animator darein bauen:
Da weiß ich nicht wie ich das machen soll
Sowas hier:
Code:
scene::ISceneNodeAnimator * dumperCollisionAnimator =
         smgr->createCollisionResponseAnimator(dumperSelector, dumperNode,
            core::vector3df(60,100,60),
            core::vector3df(0,0,0),
            core::vector3df(0,50,0));

dumperSelector->drop();       
terrainNode->addAnimator(dumperCollisionAnimator);     
dumperCollisionAnimator->drop();


klingt für mich relativ weit hergeholt, klappt auch nicht ;).

Könnt Ihr mir mal wieder helfen?

Max


Nach oben
 Profil  
 
BeitragVerfasst: 24.08.2008, 04:31 
Offline

Registriert: 23.04.2007, 20:02
Beiträge: 73
Du bräuchtest natürlich den TriangleSelector vom terrain und nicht von diesem
"dumper".


Nach oben
 Profil  
 
BeitragVerfasst: 24.08.2008, 11:11 
Offline

Registriert: 09.07.2008, 13:03
Beiträge: 14
Ahhhhh klar!!
Oh man ;)..

Danke du hast mir sehr geholfen !!

Lg
Max


Edit: Nachtrag:
Wie sieht es eigentlich mit dem Ressourcenverbrauch einer Kollisionsdetection aus, bzw wo liegen die Vorteile einer Detection mit Newton? Mein Mesh soll über eine relativ bergige Landschaft fahren.

Wenn mein Model kollidiert möchte ich eine Funktion aufrufen um es ein bischen zu rotieren, ich weiß aber momentan nicht genau wo ich diesen Aufruf unterbringen kann. Ich habs mal so probiert:
Code:
if(dumperCollisionAnimator) {
      dumperNode->setRotation(core::vector3df(0,n,0));
}


Naja, sieht alles relativ bescheiden aus.
Gibt es da irgendwelche anderen Möglichkeiten, wie das Obj immer auf allen Achsen dem Boden angepasst wird?


Nach oben
 Profil  
 
BeitragVerfasst: 25.08.2008, 00:59 
Offline

Registriert: 23.04.2007, 20:02
Beiträge: 73
Also in dem Fall würde ich doch lieber Newton nehmen, da du dir dann das
umständliche Anpassen der Achsen an den Boden sparen könntest.
Wenn du dennoch nicht Newton verwenden willst, würde ich an deiner
Stelle mal folgendes anschauen:

ITerrainSceneNode hat geschrieben:
virtual f32 getHeight (f32 x, f32 y) const =0
Get height of a point of the terrain.


Dann könntest du die Höhe des Terrains unter den Achsen ermitteln und
demenstprechend müsstest du das SceneNode so hindrehen, dass die
Achsen eben auf dem Boden wären, vielleicht müsstest du auch noch anschließend
die Höhe wieder etwas anpassen. Schau halt einfach dass nach der Drehung
kein Stück des Fahrzeuges unter dem Terrain ist, da es sonst Probleme mit der
Kollisionserkennung geben könnte.


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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