Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mai 28, 2020 22:58

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Jun 26, 2010 12:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Die 'CoolMathLibrary' (CML) ist eine einfache C++ Mathebibliothek die diverse nützliche Klassen und Funktionen bereitstellt. Eine Nutzung im Zusammenhang mit OpenGL ist vorgesehen, aber natürlich kann CML auch in anderen Bereichen genutzt werden. CML steht unter der GNU General Public License (Version 2).

CML wird von mir aktiv eingesetzt, trotzdem können Bugs natürlich nicht ausgeschlossen werden. Falls du einen Bug gefunden hast setze mich bitte davon in Kenntnis, z.B. per Email, PN oder im Diskussions-Thread.

Features
  • Unterstützung für Zeilenvektoren (2,3,4,N) und quadratische Matrizen (3x3, 4x4, MxN).
  • Unterstützung für Quaterions und Frames (ein Frame ist ein Quaternion kombiniert mit einem Translationsvektor)
  • BoundingBox und Plane Klasse.
  • Zugriff auf die Daten direkt über Attribute (z.B. vector.x) oder den Array-Operator (z.B. vector[0]). Auf die Elemente einer Matrix kann über den zweistelligen ()-operator zugriffen werden, also z.B. matrix(2,3).
  • Viele Operationen sind in der aktuellen Beta mit Hilfe von Schleifen implementiert. Der Compiler entscheidet ob er lieber Rechenoperationen einspart (Schleifenindices) oder die stattdessen die Größe des compilierten Codes optimiert. Die Verwendungen von inline ist mit bedacht gewählt.
  • überladene Outputstream-Operatoren
  • Alle Klassen sind als Templates realisiert. Eine Nutzung mit den Typen float oder double ist vorgesehen. Vektoren können auch mit int32_t oder uint32_t benutzt werden. Weitere Typen sind möglich, solange die entsprechenden Operatoren sinnvoll implementiert sind. Benutze die vordefinierten Typen, z.B. Vector3f, Vector3d oder Vector3i.
  • Verwendung von statischen Assertions (C++0x) zum testen der Template-Parameter. Diese können über ein Makro abgeschaltet oder z.B. durch Laufzeit-Assertions ersetzt werden.

Download

Benutzung
Einfach coolmath/coolmath.h inkludieren. Alle Klassen und Funktionen befinden sich im Namespace CML. Operatoren sind größtenteils sinnvoll überladen um die Handhabung zu erleichtern.

Code:
  1. using namespace CML;
  2.  
  3. Vector3f position(0,0,-3);
  4. Vector3f velocity(0,4,1);
  5. float timeElapsed = 1.0f/100.0f;
  6.  
  7. // Vektor-Addition und Skalar-Vektor-Multiplikation
  8. position += timeElapsed * velocity;
  9.  
  10. // dot-Produkt
  11. Vector3f direction(1,2,3);
  12. float f = dot(position, direction);
  13.  
  14. // Ray-Plane-Intersection
  15. Planef plane(A,B,C);
  16. plane.normalize();
  17. Vector3f intersection = plane.rayIntersect(position, direction);
  18.  
  19. // Rotation um X-Achse
  20. Matrix44f matrix = Matrix44f::rotationX(0.5f*PI);
  21.  
  22. // Zugriff auf mehrere Matrix-Elemente gleichzeitig, in diesem Fall den Translations-Teil
  23. matrix.setW(position);
  24.  
  25. // Matrix-Multiplikation, Matrix44f::lookAt is äquivalent zu gluLookAt
  26. matrix *= Matrix44f::lookAt(Vector3f(3,0,0), Vector3f(0,0,0), Vector3f(0,1,0));
  27.  
  28. // Übergabe der Matrix an OpenGL
  29. glMatrixMode(GL_MODELVIEW);
  30. matrix.glLoadMatrix();
  31.  
  32. // Transformation eines Punktes, 3D-Vektor wird zu (x,y,z,1) erweitert, beim Ergebnis wird w-Komponente ignoriert.
  33. Vector3f point(42, 3, -6);
  34. point = matrix.transform(point);
  35.  
  36. // Transformation eines Punktes, 3D-Vektor wird zu (x,y,z,1) erweitert. Es wird eine perspektivische Division ausgeführt.
  37. point = matrix.project(point);
  38.  
  39. // BoundingBox berechnen
  40. BoundingBox3f box(FLOAT_MAX, FLOAT_MIN);
  41. std::vector<Vector3f>::const_iterator itr = points.begin(), end = points.end();
  42. for ( ; itr != end; ++itr) {
  43.     box.include(*itr);
  44. }

_________________
Yeah! :mrgreen:


Zuletzt geändert von Coolcat am Sa Apr 09, 2011 14:56, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 22, 2011 10:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
CoolMath 2011-03-22 BETA veröffentlicht. Download-Link oben im ersten Post.

Changelog
  • Reimplemented large parts. Not all features are available again yet.
  • Vector and Matrix may now have arbitrary size. However, not all operations are supported for all sizes.
  • Vector operations are now element-wise like vectors in GLSL shaders. The dot and cross products are now implemented in independent functions. This results in a more clean syntax. Make sure you check for this when upgrading from the old version.
  • Heavy use of C++0x style static assertions to check template parameters. If your compiler doesn't support C++0x you can replace them with runtime assertions or disable them at all using a macro.
  • More rational usage of inline.
  • Using loops instead of hardcoded operations in many cases.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mär 26, 2011 13:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Downloads sind auf neuen Webspace umgezogen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.057s | 18 Queries | GZIP : On ]