Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

1

06.08.2009, 11:36

OmegaPhysics

Hi!

Schreibe nun schon seit einiger Zeit an einer Physikengine. Nun ist es endlich soweit, dass ich sie herzeigen kann.

Hier ein kurzes Video
Und hier der donwload-link zum selberprobiern ;)

Zum Programm:
Alle *.ogam dateien können geladen werden. Mit F7 schaltet man die Gravitation ein. Ansonsten Tastenbelgeung bitte der Hilfe mit F1 entnehmen.

Zur Technik:
Jaa... da gäbs viel zu sagen. Auf Anfrage beantworte ich gern nähere Fragen. Hier ein kurzer Überblick über die verwendeten Algorithmen:

Typ: velocity-based
Broad-phase-collision-detection: SAP
Narrow-phase-collision-detection: V-Clip
Contact-geometry-computation: Eigenentwicklung basierend auf SAT
Collision-response: constraint-solver (PGS)
error-reduction: Baumgarte-stabilisation
Integrator: implicit euler
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

06.08.2009, 12:05

na sehr schick! gefällt mir gut (hab mir aber nur das video angeschaut deine demo teste ich zu hause mal).

wirds die engine frei geben?

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

3

06.08.2009, 14:20

Hmmm... Derzeit nicht. Vielleicht zu einem späteren Zeitpunkt mal....
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Elmaron

unregistriert

4

06.08.2009, 19:15

(entfernt)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Elmaron« (06.02.2023, 00:35)


Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

5

06.08.2009, 22:11

Das vid hab nicht ich gemacht ;) Sondern einer meine Grafiker :D Also "sry"... Sollte den Stresstest zeigen. Um die anderen Fälle zu testen, einfach das Programm selbst herunterladen.. sollte fast alles abgedeckt sein!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

6

07.08.2009, 11:35

eein bischen usercode würde mich jucken is das drin? also deine physik-engine wie man die nutzt?

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

7

07.08.2009, 13:50

Hmmm... Ich könnte dir mal den Header der user-Api zeigen (den relevanten teil davon)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//Global-Callback

    inline void SetGlobalCollisionCallback(ogpCollisionCallback* pGCC) {m_pGlobalCollisionCallback = pGCC;}
    inline void UnsetGlobalCollisionCallback() {m_pGlobalCollisionCallback = NULL;}
    inline void SetCreationCallback(ogpCreationCallback* pCC) {m_pCreationCallback = pCC;}
    inline void UnsetCreationCallback() {m_pCreationCallback = NULL;}
    inline void SetIDGeneratorCallback(ogpIDGenerator* pIDG) {m_pIDGeneratorCallback = pIDG;}
    inline void UnsetIDGeneratorCallback() {m_pIDGeneratorCallback = NULL;}

    //Setzt die Gravitation

    inline void SetGravitation(const og3DVector& vGravitation)
    {
        m_vGravitation = vGravitation;
        //Gravitation außerdem für KollisionsAuflösung setzen

        ogpCollisionResponse::Instance().SetGravitation(vGravitation, m_fCurrentTimeStep);
    }

    //Globale Kräfte

    inline const void SetGlobalForce(const ogpGlobalForce& GlobalForce)
    {
        m_aGlobalForces[m_iGlobalForcesCount++] = GlobalForce;
    }


    /**
     * adds a joint to the constraint-solver
     */
    inline void addJointToSolver(ogpJoint* pJoint)
    {
        pJoint->addJointToSolver(ogpCollisionResponse::Instance().getSolver());
    }


    /**
     * This method registers a single object. In this case it has to be convex. In fact it returns
     * a ogpConvexPolytope instance. The geometry data is take out of the vertexbuffer pvPos and the
     * corresponding indexbuffer pwIndices.
     * NOTE: This method modifies the pvPos array! First the center of mass of the polytope is
     * computed and afterwards all positions are updated such that the center of mass lies in
     * the origin of the body coord system
     */
    ogpConvexPolytope* RegisterObject(og3DVector* pvPos, const WORD* pwIndices, const UINT iIndexCount,
        const og3DVector& vInitPosition, const ogMatrix& mInitRotation,
        const og3DVector& vInitVelocity = og3DVector(0.f), const og3DVector& vInitAngularMomentum = og3DVector(0.f));

    /**
     * This method registers a void composed object. Means after this registration, the container is empty.
     * Afterwards convex shapes may be added to this one!
     * initial state is taken from it's parts (which are added later on!)
     */
    ogpComposedBody* RegisterComposedBody();

    /**
     * Adds a convex polytope to a composed body and removes the polytope from
     * the "normal" object-list. Because every physical aspect is now treaten by 
     * the composed one
     */
    void addPolytopeToComposedBody(const UINT iComposedBodyID, const UINT iPolytopeID);

    /**
     * deletes a convex polytope as part of a composed object (there is not much left to do!)
     * ATTENTION: The object is deleted, not only removed from the composite!
     */
    const bool deleteComposedPart(const UINT iID);

    const bool UnregisterObject(ogpRigidBody* pObjectToDelete);
    const bool UnregisterAllObjects();

    //Simulation

    const bool DoSimulation(const float dt, const bool bDoCollisionResponse = true);
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

8

07.08.2009, 14:43

ahhh sehr schön! sowas meinte ich^^. danke ;) hast du keine webpräsenz dazu oder bin ich nur zu doof sie zu finden?!

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

9

07.08.2009, 15:07

Nein hab ich nicht wirklich... Hab mir noch nicht die Zeit genommen eine zu machen... Der Webserver dient derzeit noch mehr als dateiablage ;)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Werbeanzeige