Du bist nicht angemeldet.

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 096

Beruf: Student

  • Private Nachricht senden

1

25.07.2016, 21:22

GaussianLib, GeometronLib, AcousticsLib, TypographiaLib

Heute stelle ich hier mal meine aktuellen Projekte vor und zwar stelle ich hier gleich vier Projekte auf einmal vor,
weil sie als eine Art zusammenhängendes Framework gedacht sind, obwohl sie unabhängig voneinander genutzt werden können.

Alle Projekte haben folgendes gemeinsam:
  • Geschrieben in C++11
  • Unterstützte Platformen: Windows, Mac OS X, Linux
  • 3-Klausel BSD Lizenz
  • Quellen über github.org verfügbar
  • Projekt Dateien werden mit CMake (2.8 oder neuer) erstellt
  • Testprojekte liegen bei
Zudem sind alle Projekte primär für die Nutzung von 2D/3D Echtzeit Anwendungen gedacht.
Also entweder für Prototypen und Testanwendungen im Bereich des Visual- und Audio Computing, oder sogar eine neue 3D Engine.

GaussianLib
  • Grundlegende Datenstrukturen und Funktionen für lineare Algebra speziell für 2D und 3D Anwendungen
  • Klassen: Vector, Matrix, Quaternion, AffineMatrix3, AffineMatrix4, ProjectionMatrix
  • Mit Pre-Compiler Macros kann zwischen, Spalten- und Zeilenvektoren, und Row-Major- und Column-Major Speicher umgeschaltet werden.
  • Spezialisierte Templates: Vector2, Vector3, Vector4, Matrix2, Matrix3, Matrix4
  • Überladene '<<' Operatoren für std::ostream zum einfachen Debuggen mit std::cout o.Ä.
  • Getting Started PDF Dokument mit detaillierter Einführung

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Gs::Vector3 a(1, 2, 3), b(4, 5, 6);

// Swizzle Operator wie in HLSL/ GLSL
Gs::Vector4 c = a.xxyz();

// Rechnen mit beliebigen Matrizen
Gs::Matrix<float, 4, 3> A;
Gs::Matrix<float, 3, 4> B;
Gs::Matrix<float, 3, 3> C = A*B;

std::cout << "A*B = " << std::endl << C << std::endl;

// Für affine Transformationen können die Speicher optimierten Klassen AffineMatrix3 und AffineMatrix4 verwendet werden
Gs::AffineMatrix4 transform;
transform.SetPosition({ 0, -1, 4 });
transform.MakeInverse();


GeometronLib
  • Grundlegende Datenstrukturen und Funktionen für 2D und 3D Geometrie
  • Grundlegende Funktionen zur Kollisionserkennung und Mesh Clipping
  • Klassen: Line, Ray, Plane, OBB, AABB, Sphere, Frustum, Transform2, Transform3, Projection, Spline, TriangleMesh
  • Mesh Generator: Cuboid (mehr sollen noch folgen...)

C-/C++-Quelltext

1
2
3
4
5
6
7
// Erzeuge einen Quader
Gm::MeshGenerator::CuboidDescriptor desc;
desc.size          = { 1, 2, 3 };
desc.uvScale       = { 2, 4, 6 };
desc.segments      = { 10, 10, 20 };
desc.alternateGrid = true;
Gm::TriangleMesh mesh = Gm::MeshGenerator::Cuboid(desc);


AcousticsLib
  • Einfache Audio Bibliothek zur Wiedergabe und Aufnahme von Sounds
  • Synthesizer und komfortables Interface zur manuellen Modulation der Audiodaten.
  • Subsysteme: OpenAL (XAudio2 soll noch folgen...)
  • Unterstützte Formate zur Wiedergabe: WAVE, AIFF, OggVorbis
  • Unterstützte Formate zum Speichern: WAVE
  • Bei dieser Library verändert sich derzeit das Interface noch recht stark

C-/C++-Quelltext

1
2
3
// Einfacher geht nicht :-)
auto audioSystem = Ac::AudioSystem::Load();
audioSystem->Play("MyMusic.ogg");


TypographiaLib
  • Bibliothek für einfache Font Generierung
  • Nutzt FreeType und verpackt es in ein einfaches High-Level Interface
  • Klassen zur Verwaltung von Font Objekten in GUIs: TextFieldString, MultiLineString

C-/C++-Quelltext

1
2
3
4
5
auto fontModel = Tg::BuildFont({ "MyFontFile.ttf", 60 });
// Und jetzt mit folgenden Klassenfunktionen und Feldern auf den Font zugreifen:
//   fontModel.image.GetSize()
//   fontModel.image.GetImageBuffer()
//   fontModel.glyphSet


Ich hoffe der ein oder anderen kann mit den Projekten etwas anfangen :)

Viel Spaß damit und Gruß,
Lukas

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »LukasBanana« (31.07.2016, 12:06)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 096

Beruf: Student

  • Private Nachricht senden

2

28.07.2016, 11:21

Hat sich mal jemand eine der Projekte angeschaut?
Ein kleines Feedback wäre schön :)

CeDoMain

Alter Hase

Beiträge: 592

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

3

31.07.2016, 00:14

War eine Woche E5 wandern... Finde das sehr interessant. Wenn ich übernächste Woche Zeit habe, dann schau ich mir das auf jeden Fall mal an. Solange musst du aber auf mich noch warten...
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

4

01.08.2016, 12:03

Ich will ja jetzt nichts falsches sagen, aber die Projekte sind eher so überflüssig.
Das hat doch jeder in der ein oder anderen Form in seinen eigenen Projekten drin.
Wer braucht denn noch eine Mathe-Library? Oder der Kram mit Geometry. Eine Highlevel API
für Fonts?
Also wundere Dich nicht, wenn es keinen groß interessiert. Das alles gibt es schon vielfach
von anderen Leuten.
Das ist auch meine persönliche Meinung und ich meine das nicht böse, aber es ist einfach belanglos.
Hier ist zum Beispiel ein sehr bekannter Vertreter:
https://github.com/nothings/stb

TrommlBomml

Community-Fossil

Beiträge: 2 141

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

01.08.2016, 19:31

Ich will ja jetzt nichts falsches sagen, aber die Projekte sind eher so überflüssig.


Nana! Keine Software, die etwas sinnvolles tut, ist überflüssig. Wie du vielleicht auch weißt, hat jede Lib auch ihre Eigenheiten, und vielleicht bietet die von LucasBanana eine Architektur oder Features, die so nicht oder so gut designed eingebaut sind.

Allerdings muss ich zustimmen, dass mir prinzipiell nicht der Vorteil gegenüber anderen Libs auffallen. Mir fehlt ja eine .NET Integration, einfach weil die Mittlerweile ziemlich verbreitet ist und mir da manchmal solche Libs mit der Qualität von C++ fehlen. Da muss man je nach Plattform ziemlich suchen....

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 096

Beruf: Student

  • Private Nachricht senden

6

01.08.2016, 20:48

Mir fehlt ja eine .NET Integration, einfach weil die Mittlerweile ziemlich verbreitet ist und mir da manchmal solche Libs mit der Qualität von C++ fehlen. Da muss man je nach Plattform ziemlich suchen....

Über eine .NET Anbindung bzw. einen entsprechenden Wrapper habe ich auch schon nachgedacht, da ich in letzter Zeit auch einiges mit C# gemacht habe.
Für eine reine Template Library lohnt sich ein Wrapper aber wohl eher weniger.
Da müsste man schon etwas komplett .NET eigenes machen.

Aber für die Audio Library könnte ich mir das schon vorstellen.

MCP

Alter Hase

Beiträge: 514

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

7

02.08.2016, 12:57

Wenn die Interfaces der einzelnen Bibliotheken gleich gehalten sind kann das schon ein Vorteil sein gegenüber drei Bibliotheken die sich alle ganz anders bedienen lassen. Wenn die Doku ebenfalls einheitlich ist, hat man drei Bibliotheken aus einer Hand mit denen man gelernt hat umzugehen und kennt deren Eigenheiten.
Ganz abgesehen davon ist es immer gut mehrere Optionen von Bibliotheken zu haben die man benutzen kann.

Werbeanzeige