Verständnis von ODE



  • Hi!
    Will mich mit ODE beschäftigen, brauche aber noch Grundverständnis dazu...

    Ersteinmal, kennt jemand gute Tutorials zu ODE? Alles, was ich bis jetzt gefunden habe, sind ziemliche 0-8-15 Tutorials.

    Was ist der Unterschied zwischen einer Welt und einem Raum? Bzw. warum muss ich eine Welt erstellen, wenn man doch schon z. B. einen Hashspace definiert hat? Habe da sin der Manual so verstanden, das ein Space z. B. ein statisches Level repräsentiert.

    Habe mal was von MassSpringSystems gehört. Ist ein Body dann praktisch soetwas wie ein Atom?

    Geometrys(Geoms) sind dann wohl nur Hüllkurven dieser Atome, oder?

    Wenn ich ein Geom positioniere, dann nur in Relation zum Body?

    Wenn man eine Welt simulieren will, dann muss man anscheinend selber auf Kollision prüfen. Wenn Kollision auftritt, dann generiert ODE per Funktion eine
    Liste aus Contactjoints. Diese beinhalten Position, Normal usw. der Kollisionspunkte. Bloß wie gehts dann weiter? Man kann dann anscheinend Eigenschaften zuweisen, das ein Ball springen kann, aber wie wendet man das auf diesem Ball dann an?

    Was hat überhaupt eine Jointgroup für einen Sinn?

    Was macht dWorldStep(Fast) ? Handelt es nur die Forces?

    mfg olli



  • Erst einmal ist ODE nicht auf Einfachheit, sondern auf Freiheit aus.
    Du sollst das System soweit manipulieren, wie es Dir passt.
    Deswegen mußt Du auch die Kollisionsfunktion selber bauen (einen Stub für allgemeine Fälle gibt es aber ja).

    Vertex schrieb:

    Was ist der Unterschied zwischen einer Welt und einem Raum? Bzw. warum muss ich eine Welt erstellen, wenn man doch schon z. B. einen Hashspace definiert hat?

    Zunächst: Du _MUSST_ gar nicht. 😎
    Aufgrund oben genanntem unterscheidet ODE zwischen Kollisions-Detektion (Geoms in der World), und Physik-System (Bodys im Space).
    D.h beides ist völlig unabhängig.
    Du kannst sogar Dein eigenes Collision-Detection-System einbauen, oder SOLID z.B.

    Vertex schrieb:

    Habe da sin der Manual so verstanden, das ein Space z. B. ein statisches Level repräsentiert.

    Wenn Du einfach geil Physik haben willst, brauchst Du beides.
    Du definierst sowohl eine World als auch einen Space.

    Du hast dann Bodys - das sind Punkte ohne Ausdehnung, auf die aber Kräfte wirken können und Geschwindigkeiten.
    Und Du hast Geoms - das ist "ein Stück Geometrie", allerdings ohne Masse. Diese dienen der Kollisionsdetektion.
    Für eine Holzkiste die irgendwo runterfallen soll brauchst Du also beides. Du kannst ja ein Geom mit einem Body verknüpfen.

    Falls Du aber Level-Begrenzungen haben willst z.B. ("Aussen-Mauern"), solltest Du natürlich nicht einfach einen Quader mit riesiger Masse definieren -- das kann das Physiksystem aus dem Takt bringen!
    Du definierst einfach ein Geom (d.h. es finden Kollisionen mit den anderen Objekten statt), aber keinen Body dazu (d.h. es werden keine Kräfte drauf gewirkt).

    Vertex schrieb:

    Was hat überhaupt eine Jointgroup für einen Sinn?

    Es beinhaltet jede Menge Joints, die aber wahnsinnig schnell (;)) wieder gelöscht werden können.
    In jedem Frame generiert die Kollisions-Detektion von ODE halt an jedem Kontaktpunkt einen ContactJoint, die dann die Physik-Engine weiterberechnet. Nach jedem Frame müssen aber alle ContactJoints wieder gelöscht werden. Das geht so halt schneller als durch alle durch-iterieren zu müssen. 🕶

    Hatte zu ODE und Physikengines im Allgemeinen mal ein Referat gehalten. Wenn ich das noch auftreiben kann, schick' ich's Dir...



  • Danke, das klährt so einiges!
    mfg olli


Anmelden zum Antworten