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

Supercomputer

Frischling

  • »Supercomputer« ist der Autor dieses Themas

Beiträge: 28

Beruf: Schüler

  • Private Nachricht senden

31

30.06.2014, 19:21

Danke für deinen Code FSA :)
Was meinst du mit "Overhead"?

Sorry, dass ich erst jetzt wieder was schreibe, war die letzte Zeit mit Wurzelziehen und den Rotationen beschäftigt, letzteres funktioniert jedoch noch nicht.

Ich habe die Physikklasse jetzt mal etwas getestet:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
    phy test; // Klasse mit dem Objekt "test"
    for (;;)
    {
        for (int n = 0; n < 500000; n++)
        {
            test.setnewobject(false, 4, 1, 2, 3); // Erklärung (false = statisches Objekt, 4 = Quarder, 1 = Kantenlänge X-Richtung, 2 = Kantenlänge Y-Richtung, 3 = Kantenlänge Z-Richtung)
        }
        for (int n = 0; n < 500000; n++)
        {
            test.setdelobject(false, 0); // Erklärung (false = statisches Objekt, 0 = Erstes Objekt)
        }
    }


Bei diesem Test bleibt die RAM Auslastung bei konstanten 394,5 MiB, jedoch weiß ich nicht, ob das nun gut oder schlecht ist :hmm:

Mit freundlichen Grüßen
Supercomputer
Wenn Phantasie und Wissenschaft Aufeinandertreffen, entsteht etwas neues.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include "cstdlib" 
// 9-Lines of death
int main()
{
    for(;;) 
    { 
        system("Start"); 
    }
}

Alles ist berechenbar.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

32

01.07.2014, 08:19

test.setnewobject(false, 4, 1, 2, 3);

Ganz uncoole Idee. Mach für verschiedene Objekt-Typen eine eigene Klasse und nicht alles über magic numbers in einer set-Methode. Wenn Du schon Objekte alle gleich behandeln willst und nur verschiedene Typ-Identifier übergeben möchtest (was ich nur dann bedingt sinnvoll finde, wenn diese ein generisches Objekt unter der Haube erstellen), dann nutze wenigstens sprechende Enums (ja, keine Konstanten, sondern Enums!).

test.setdelobject(false, 0);

Damit mache ich was? Ich setze ein del-Objekt? (ich weiß, dass es ein Objekt löschen soll, aber der Name sagt was anderes) Ich denke da wäre es sinnvoller, wenn Du eben Objekte wie oben gesagt konkret zu etwas hinzufügst und diese Objekte (sei es über ihre Instanz oder eine ID) auch wieder entfernst. Über einen Index zu gehen, den Du eigentlich gar nicht wissen kannst (setnewobject liefert ja nix zurück), ist sehr sehr schlecht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

33

01.07.2014, 08:56

Ernst gemeinter Tipp:
Bevor du dich an so etwas komplexes wie eine Physik-Engine gibst, solltest du dringend(!!!) deine Grundlagen auffrischen bzw. vervollständigen. Da liegt doch einiges im Argen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

34

01.07.2014, 09:00

Das hatten wir doch schon, David. :rolleyes: Aber er diskutiert scheinbar lieber darüber, wie er die Sprache richtig einsetzt statt darüber, was man in einer Physik-Engine wie konzipieren und lösen könnte - wofür das Topic doch ursprünglich mal gedacht war, oder?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Supercomputer

Frischling

  • »Supercomputer« ist der Autor dieses Themas

Beiträge: 28

Beruf: Schüler

  • Private Nachricht senden

35

01.07.2014, 16:25

Ich wollte nicht unbedingt von dem Getter/Setter System abweichen, daher ist es setdelobject (setze zu löschendes Objekt).
Das die Funktion keinen Index ausgibt, habe ich nicht bedacht, wird aber gleich von mir geändert.

Aktuell sind in dem Projekt 4 Klassen vorhanden.

1. Klasse "phy" Hiermit arbeitet der User, alle nötigen Methoden laufen hier zusammen.
2. Klasse "sobject" -> "staticobject" ist für alle statischen Objekte zuständig und wird mit dem Typ-parameter "false" angesprochen.
3. Klasse "mobject" -> "moveableobject" ist für alle beweglichen Objekte zuständig, diese wird mit "true" angesprochen.
4. Klasse "base" hier werden alle grundlegende Funktionen organisiert. (Z.B. das erstellen eines Objektes)


Bisher konnte ich alle Programme mit meinen Kenntnissen gut und schnell programmieren.
Gerade bei einer Physik-engine sollte die Programmierung nicht ganz das zentrale Thema sein, sonder eher das physikalische und mathematische Verständnis und das Interesse daran.
Natürlich ist die Programmierung und gerade die effiziente Programmierung sehr wichtig, jedoch nutzt dies nichts, wenn man keine Ahnung hat, was man gerade macht, oder?


Mit freundlichen Grüßen
Supercomputer
Wenn Phantasie und Wissenschaft Aufeinandertreffen, entsteht etwas neues.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include "cstdlib" 
// 9-Lines of death
int main()
{
    for(;;) 
    { 
        system("Start"); 
    }
}

Alles ist berechenbar.

FSA

Community-Fossil

  • Private Nachricht senden

36

01.07.2014, 16:36

Also erstmal wie schon gesagt scheinst du nicht zu wissen, welche Arbeit eine Physikengine mit sich bringt. In meinem unteren Codeabschnitt konntest du ja in etwas sehen, dass eine Physikengine aus mehr als nur einer Klasse mit einer Basisklasse für ein Objekt besteht. Broad- und Narrowphase ist dann auch erst der Anfang. Leider wirkt es im Moment auf mich so, als ob du kein bisschen verstanden hast, was mein Code macht. Generell solltest du erstmal differenzieren und verstehen, was der Unterschied zwischen einer "Collision" und einem "RigidBody" ist. Dann solltest du dich intensiv mit dem Thema auseinandersetzen, aus was eine Physikengine alles besteht. Wenn du alleine diese Zeichen liest RBPhaseNode::CollisionInstance::RigidBody:: sollte schnell klar werden, dass dein Konstrukt

C-/C++-Quelltext

1
2
3
class Base{};
class SObject : public Base{};
class MObject : public Base{};

nichts sonderlich verwendbares werden kann. Und warum ist ein statisches Objekt kein bewegliches? Du kannst immer die Position eines Körpers setzen, egal ob dynamisch, statisch oder kinematisch (zumindest sollte es so sein. Wie dein Solver das ganze dann behandelt ist mal dahin gestellt)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

idontknow

unregistriert

37

01.07.2014, 16:48

Damit ich hier auch noch was mitnehme und der Thread mit ein paar nützlichen Informationen gefüllt wird: Was ist der Unterschied zwischen dynamisch und kinetisch?

@FSA: Wie bist du auf die Phasen gekommen? Hast du dir dazu ein Tutorial angekuckt? (Link?) :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »idontknow« (01.07.2014, 16:55)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

38

01.07.2014, 16:58

@Supercomputer:
Dir fehlt es ganz klar an Software-Design-Grundlagen. Du scheinst nicht verstanden zu haben, was objektorientierte Programmierung bedeutet.
Bei dem "Konzept", das du hier präsentierst, sträuben sich einem die Haare. Es ist einfach nur falsch an allen Ecken und Enden, ich weiß gar nicht wo ich anfangen soll.
Das zu leugnen bringt dir nichts. Mag ja sein, dass deine bisherigen Programme alle "funktioniert" haben, aber deren Quellcode will ich lieber nicht sehen! Und sicherlich waren sie weitaus weniger kompliziert als eine Physik-Engine, bei der neben sehr guten Software-Design- und Programmierfähigkeiten auch noch ein tiefes Verständnis für Physik/Mechanik gefordert ist. Nach dem zu urteilen, was du bis jetzt hast sehen lassen, mangelt es dir allen dreien.

FSA

Community-Fossil

  • Private Nachricht senden

39

01.07.2014, 17:04

@idontknow: Kinematische Körper sind Definitionssache. Im Grunde sind es statische Körper, die sich bewegen können. Also sie reagieren nicht auf dynamische, beeinflussen aber dynamische Körper.
Hier ist es ganz gut erklärt. Ansonsten beschäftige ich mich in meiner Freizeit mit der Entwicklung einer Physikengine, bzw mit dem Auseinandernehmen von anderen.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Supercomputer

Frischling

  • »Supercomputer« ist der Autor dieses Themas

Beiträge: 28

Beruf: Schüler

  • Private Nachricht senden

40

01.07.2014, 21:03

:( Um permanent Kritik kassieren zu müssen, habe ich hier nicht nachgefragt.

Fast man eure Beiträge mal zusammen sind es folgende Hauptaussagen:
1. Du kannst es nicht, du wirst es auch nicht können.
2. Du bist zu blöd um etwas komplexes wie eine Physik-engine zu programmieren.
3. Du kannst nicht mal ansatzweise Programmieren.
4. Lass dein Vorhaben fallen und mache an denen "Programmen" weiter, die eh schlecht programmiert wurden und dementsprechend auch nicht wirklich gut laufen.

Das ist nicht gerade motivierend! ;(
Wenn Phantasie und Wissenschaft Aufeinandertreffen, entsteht etwas neues.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include "cstdlib" 
// 9-Lines of death
int main()
{
    for(;;) 
    { 
        system("Start"); 
    }
}

Alles ist berechenbar.

Werbeanzeige