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

Anonymous

unregistriert

1

29.09.2004, 23:34

Math Lib

Hi,

ich habe eine Verständisfrage:

Wenn ich eine kleine Math Lib schreiben will, dann brauche ich für z.B. Vektoren verschiede Funktionen, wie z.B. berechnen der Länge, Punktprodukt usw.

Was ich nicht verstehe ist, soll ich diese Funktionen außerhalb der eigentlichen Vector Klasse schreiben oder als Methoden innerhalb der Klasse.
Gibt es dabei überhaupt einen Vorteil oder ist es egal?

mfg, mathlib

2

30.09.2004, 00:52

Professionelle Engines verwenden es innerhalb, damit es OOP ist. Ausserdem ist es doch sehr Hilfreich wenn man sagt Vector3 a"." und dann sehen kann was für Funktionen überhaupt implentiert sind, ohne das man in der Docu nachschlagen muss.

Anonymous

unregistriert

3

30.09.2004, 09:03

Das Dachte ich eigentlich auch.

Aber sind man sich beispielsweise den Code der Matrixlib, die bei der Game Programming Gems1 dabei ist an, sieht man dass dort die Hilfsfunktionen außerhalb der Klasse definiert sind. Und da ich mir vorstellen kann, dass die Autoren wirkliche Profis sind, Frage ich mich warum die das auf diese Weise implementiert haben...

Anonymous

unregistriert

4

01.10.2004, 13:25

Hat den niemand eine Antwort oder eine idee auf diese scheinbar triviale Frage?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

01.10.2004, 14:07

Hmm also ich würde die Funktionen schon global und als inline machen und vielleicht in nen eigenen namespace packen...

6

01.10.2004, 14:57

naja, auf jeden Fall solltest du sehr viele Operatoren in die Klasse einbauen. Aber wenn du das Punktprodukt zweier Vektoren ausrechnene willst, solltest du eine globale Funktion machen, weil man das schlecht logisch in die Vektorklasse packen kann.
Ansonsten ist es vieleicht eine gute Idee eine derartige Mathlib zu machen, aber ich zumindest bevorzuge "professionelle" wie z. B. DirectX weil man da sicher sein kann, dann alles stimmt und sie maximale Performance liefern.
Lieber dumm fragen, als dumm bleiben!

7

01.10.2004, 16:28

In einen eigenen Namespace sollte die MathLib so oder so ;) Zumal kann eine Math Engine auch Professionell sein wenn sie nicht OOP ist. Denn ja...auch heute noch kann man mit C Arbeiten ;)

Im prinzip nach ist es eigentlich egal. Und zum anderen hängt es auch oft davon ab was die Funktion macht. Bei Operatoren wie z.B "+" oder "-" mit einem Faktor (also keinen weiteren Vektor) sollten außerhalb geschrieben werden.
Warum, weil z.B. die Addition vector + faktor, für den Compiler, was anderes ist als faktor + vector.

In Operatorform:

C-/C++-Quelltext

1
2
vector4d operator + (const vector4d v, const float f);
vector4d operator + (const float f, const vector4d v);


Inerhalb einer Klasse kann man nur den ersten der beiden Operatoren Definieren. Und es sieht blöd aus wenn der zweiten dann außerhalb der Klasse ist.

Bei Funktion sieht es ähnlich aus. Z.B. zur Normalisierung eines Vektors. Wenn ich den aktuellen Vektor Normalisieren will, sollte diese Funktion inerhalb der Klasse stehen. Wenn ich aber eine Normalisierte Version eines Vektors haben will, sollte die außerhalb stehen. Obwohl das auch wieder der Geschmacktssache und den Designvorstellungen unterliegt.

So in etwa verhält es sich dann mit der gesamten MathLib.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

8

03.10.2004, 23:38

Ok, danke DragonMaster.

Zu dem Einsatz von DirectX will ich noch kurz was "sagen".
Generell würde ich auch die D3DX Lib vorziehen, immerhin bekomme ich dann voll optimierten Code. Nur habe ich dann auch keinen portablen Code mehr. Die Math lib an der ich gerade arbeite soll möglichst Plattform unabhängig sein und vorallem auch auf Konsolen laufen, primäres Ziel PS2.
D.h. mit D3DX ist da nicht viel zu machen.
Aber ich mache meine Klassen kompatibel zu den verschiedenen libs.

Werbeanzeige