Aktuelle Zeit: 16.05.2024, 11:15

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 73 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7  Nächste
Autor Nachricht
BeitragVerfasst: 24.06.2009, 21:11 
Offline
Benutzeravatar

Registriert: 17.02.2008, 14:08
Beiträge: 125
Hi,

also das mit dem Event hab ich jetzt mal versucht, aber ich blicke da nicht so ganz durch.
Auschlaggebend sind ja diese Funktionen:
Code:
    virtual bool OnEvent(const SEvent &event);
    virtual bool onEvent(IIrrOdeEvent *pEvent);

Aber wie genau wird onEvent aufgerufen? OnEvent, dafür sorgt ja der EventManager, aber die andere?

Und einfach das Event in ein IIrrODEEvent umzucasten, geht nicht.

MfG
FTC

_________________
Cold-Death
Magnon


Nach oben
 Profil  
 
BeitragVerfasst: 25.06.2009, 06:47 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
@Freetimecode: die "OnEvent" (großes "O") Funktion stammt aus der Irrlicht Event Pipeline, die IrrODE Pipeline ist komplett getrennt davon (sollte ich vielleicht mal ändern ... mal sehen). Für die IrrOde events muss du eine Klasse von "IIrrOdeEventListener" ableiten, eine Instanz erstellen und diese im "IrrOdeManager" registrieren. Die "onEvent" (kleines "o") Funktion wird da aufgerufen, allerdings hat der IrrOdeEventListener noch eine Methode "handlesEvent", die zuvor aufgerufen wird, um rauszufinden, ob dein Event Listener was mit dem Event anfangen kann. Ich denke mal, die werde ich bei Zeiten entfernen, ist eigentlich überflüssig.

Schau dir das mal an: http://www.bulletbyte.de/irrOde/doxygen/class_c_irr_ode_manager.html

@BlitzBasic303: kannst du vielleicht das Projekt irgendwo hochladen, damit ich es mir mal genauer anschauen kann (mit Resourcen und so). Ist schwierig, ohne den Gesamtzusammenhang das Problem zu finden.

_________________
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 25.06.2009, 10:07 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
@Brainsaw: Du hast Post ;)


Nach oben
 Profil  
 
BeitragVerfasst: 25.06.2009, 10:43 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
Danke für den Tip. Hätts (mal wieder) fast übersehen. Ich hab mir das mal auf meinen Stick gespeichert, kann aber nicht so genau sagen, wann ich dazu komme ... Montag evtl.

_________________
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 25.06.2009, 11:13 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
Ok, kein Problem ;)


Nach oben
 Profil  
 
BeitragVerfasst: 25.06.2009, 15:00 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
Alles zurück! :D
Es war mein Fehler... Ich Trottel hab vergessen der World ne Gravity zu geben... Funktioniert jetzt also :D
Dann nochmal ne Frage, wie kann ich dem Ball einen "Stoß" in eine bestimmte Richtung geben? Ein Anderes Objekt einfach gegen schubsen?
Und wie kriege ich den Ball dazu nicht so lange auszurollen. Hat das was mit "setLinearDamping" oder so zutun?
Ich habe auch das:
Code:
  BahnenTrimesh->getSurfaceParameters()->setMu(10.0f);
  BahnenTrimesh->getSurfaceParameters()->setMu2(10.0f);

versucht. Bringt aber auch nichts, egal wie der Wert ist.


Nach oben
 Profil  
 
BeitragVerfasst: 26.06.2009, 06:09 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
Schön, dass sich manche Probleme von selbst lösen :D

Um dem Ball einen Impuls zu geben nimmst du am besten void CIrrOdeBody::addForce (http://www.bulletbyte.de/irrOde/doxygen/class_c_irr_ode_body.html#a4a31cebd9e1fbf161b464ac97b42082).

Falls du die lineare Dämpfung zu hoch eingestellt hast kann es schon passieren, dass der Ball liegen bleibt. Ich würd mal mit dem Wert rumspielen, vielleicht erstmal komplett ausschalten und schauen, obs dann klappt.

_________________
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 27.06.2009, 09:33 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
Er soll ja liegen bleiben :D
Der rollt einfachbis in die Unendlichkeit auf der Bahn rum obwohl die komplett horizontal ist.


Nach oben
 Profil  
 
BeitragVerfasst: 27.06.2009, 09:39 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
So, SetLinearDamping Funktioniert ;)
AddForce probier ich nachher, muss jetzt erstmal weg :D

UPDATE: So bei Addforce gibt's so eine schöne Windows "Problembericht senden" Meldung...
Code:
irrOdeBallBody->addForce(core::vector3df(0.0f,0.0f,1.0f));

müsste doch richtig sein?


Nach oben
 Profil  
 
BeitragVerfasst: 28.06.2009, 12:32 
Offline
Benutzeravatar

Registriert: 17.02.2008, 14:08
Beiträge: 125
Hm, das mit dem StepEvent funktioniert jetzt, aber macht immer noch nicht das was ich will.
Ich möchte nicht die Kamera dem Body anpassen, sondern andersrum. Also das die Kamera das ultimativ schwerste Objekt ist das alle anderen wegschubst, jedoch selber von keiner anderen physikalischen Kraft beeinflusst wird.
Ich habe mir also gedacht ich füge der Kamera einen Body hinzu, und setze den immer wieder an die gleiche Stelle zurück und den Speed auf 0. Aber das ganze fängt nur an sich wie wild zu drehen und es gibt auch keine Kollision.
Das versuche ich zu lösen ^^

Edit: Ok also ich glaube das ich es mit einem Geom lösen kann. Also ich weiße erstelle einfach ein Sphere Geom und setze es immer an die Position der Kamera. Jedoch funktioniert das setPosition() nichtmehr nachdem initPhysics() aufgerufen wurde.

MfG

_________________
Cold-Death
Magnon


Nach oben
 Profil  
 
BeitragVerfasst: 29.06.2009, 08:12 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
OK, das mit dem Geom erstellen und verschieben stimmt. Es war keine überladene Methode CIrrOdeGeom::setPosition definiert, d.h. wenn man die setPosition Methode von einem Geom aufgerufen hat, dann wurde nur die Irrlicht, nicht die ODE Position verändert. Ich kompilier gerade eine Version mit einer Änderung diesbezüglich und lad sie nachher hoch. Die Änderung ist allerdings ungetestet, Feedback wäre deswegen willkommen. Ich denke, so in einer halben Stunde sollte der Upload gemacht sein.

_________________
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 29.06.2009, 13:39 
Offline
Benutzeravatar

Registriert: 17.02.2008, 14:08
Beiträge: 125
Ja jetzt klappt es :)

Allerdings, wenn ich so eine Konstellation habe:
Code:
    ICameraSceneNode *cam=smgr->addCameraSceneNodeFPS(0,100,0.03);


    IAnimatedMeshSceneNode *camerasphere=smgr->addAnimatedMeshSceneNode(smgr->getMesh("data/sphere.3ds"),worldNode);
    camerasphere->setMaterialTexture(0,driver->getTexture("data/sphere_bw.jpg"));
    camerasphere->setMaterialFlag(EMF_LIGHTING,false);
    camerasphere->setMaterialFlag(EMF_BACK_FACE_CULLING,false);
    camerasphere->setMaterialFlag(EMF_WIREFRAME,true);

    CIrrOdeGeomSphere *pCamSphere=reinterpret_cast<CIrrOdeGeomSphere *>(smgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_SPHERE_NAME),camerasphere));


So bringt es nichts, wenn ich camerasphere->SetPosition aufrufe, wird das Geom nicht bewegt (obwohl es doch eigentlich dessen Child ist?)
Also habe ich mir gedacht dann müsste es sich halt andersrum bewegen. Aber wenn ich das Geom positioniere dann bleibt camerasphere unverändert...

woran liegt das? Es herrscht doch eine Child-Parent Beziehung vor?

MfG
FTC

_________________
Cold-Death
Magnon


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 73 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

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