Wilkening-Online Logo

C++ User-Treffen in Aachen am 17.5.2018



Von Detlef Wilkening

Wie immer am Anfang des Berichts kurz der Hinweis, dass alle Vorträge, Quelltexte, usw. - soweit vorhanden bzw. mir bekannt - auf der Vortrags-Übersichts-Seite verlinkt sind.

Das C++ Treffen fand mal wieder bei Inform statt, und war mit 24 Teilnehmern diesmal nicht so gut besucht. Woran das lag? Keine Ahnung - ich wußte jedenfalls von keinem parallelen Event. Wie dem auch sei - für die, die gekommen waren, wurde es ein besonders guter Abend mit ganz hervorragenden Vorträgen.

C++ User-Treffen Aachen 17.05.2018 - Bild 1
Foto 01: C++ User-Treffen Aachen 17.5.2018

Zuerst aber einmal vielen Dank von hier an die Inform für den Raum, und die gute Bewirtung mit Essen und Getränken. Da wir diesmal nicht so viele Teilnehmer waren, konnte (musste) jeder besonders viel essen ;-)

C++ User-Treffen Aachen 17.05.2018 - Bild 2
Foto 02: C++ User-Treffen Aachen 17.5.2018

Der Abend began wie fast immer mit meiner obligatorischen Einleitung. Ich stellte die Themen des Abends vor, schaute kurz nach vorne auf das nächste Treffen bei NI, und wies darauf hin, dass ich Vorträge für die nächsten Treffen suche.

C++ User-Treffen Aachen 17.05.2018 - Bild 3
Foto 03: Detlef Wilkening bei der obligatorischen Einleitung des C++ User-Treffens

Dann began der eigentliche Abend mit dem ersten Vortrag von Mirco Müller über "Ray-Marching in C++". Ray-Marching - häufig auch "Sphere-Tracing" oder "Ray-Casting" genannt - ist eine Technik zur schnellen Darstellung von 3-D Szenen im Computer. Bekannter ist vielleicht die Technik Ray-Tracing mit der gleichen Zielsetzung, die intern aber ganz andes funktioniert.

C++ User-Treffen Aachen 17.05.2018 - Bild 4
Foto 04: Mirco Müller mit "Sphere-Tracing/Ray-Marching in C++"

Mirco erklärte zuerst ausführlich und an einem einfachen 2-D Beispiel, wie Ray-Marching funktioniert, und wie man den Algorithmus dann in C++ umsetzen könnte. Hierfür hatte er einen einfachen Quelltext mit kleiner Vektor-Klasse mitgebracht, den man relativ schnell durchschauen und verstehen konnte. Der Umstieg auf 3-D war dann zwar trotzdem nicht trivial, aber da man das Konzept verstanden hatte, konnte man den Ideen und den Sourcen halbwegs folgen.

C++ User-Treffen Aachen 17.05.2018 - Bild 5
Foto 05: Mirco Müller mit "Sphere-Tracing/Ray-Marching in C++"

Schön an Mircos Vortrag war auch, dass er nicht nur reine Theorie mitgebracht hatte - sondern alles auch praktisch demonstrieren konnte. Er hatte viele Beispiele mitgebracht - von einfachen geometrischen Formen, über Verschmelzungen von Figuren, Integration von Ebenen und Schatten, und vielem mehr. Besonderen Wert legte Mirco hierbei auf die Beleuchtungs-Modelle, da ohne deren Wissen keine gute 3-D Szene zustande kommt - und sie oft nicht behandelt werden.

C++ User-Treffen Aachen 17.05.2018 - Bild 6
Foto 06: Mirco Müller mit "Sphere-Tracing/Ray-Marching in C++"

Zum Schluß zeigte Mirco dann noch, wie sich neben diesen doch recht einfachen Figuren mit Ray-Marching schnell z.B. Landschaften erzeugen lassen - und simulierte einen Kamera-Flug über eine Hügellandschaft.

Der Vortrag löste viele Fragen und Diskussionen aus - denn Computer-Grafik ist natürlich ein Thema, das wohl alle anspricht. Und die meisten brachten nicht viel Wissen mit - und so gab es viel noch detaillierter zu erklären und zu diskutieren. Mirco meisterte alle Fragen und konnte seine Begeisterung mit uns teilen. Klar ist, dass kann nicht der letzte Vortrag zu diesem spannenden Thema sein - und so wird Mirco in den nächsten Monaten noch einige Folge-Vorträge halten müssen.

Die Präsentation, alle Bilder und Beispiele von Mirco findet man auf GitHub. Außerdem hat Mirco folgende Links auf YouTube-Videos zur Verfügung gestellt: Nach über eine Stunde 3-D Grafiken waren viele schon reif für die Pause, aber zuerst war noch Sven Johannsen mit dem Thema "10 Arten in C++ eine Array-Größe zu bestimmen" dran. Sven motivierte nochmal kurz, was der Hintergrund dieses doch eigentlich trivialen Themas ist, und warum ihm das typische und bekannte C-Makro "sizeof(a)/sizeof(a[0])" nicht gefällt - es ist nicht wirklich typsicher und liefert in manchen Situationen (z.B. beim "std::vector") statt eines Compiler-Fehlers nur einen fehlerhaften Wert.

C++ User-Treffen Aachen 17.05.2018 - Bild 7
Foto 07: Sven Johannsen mit "10 Arten Array-Größen zu bestimmen"

Sven zeigte insgesamt 10 Arten, die Array-Größe zu bestimmen - mit Boost, constexpr-Template Funktionen, und anderen Techniken. Es ist immer wieder beeindruckend (und auch erschreckend zu sehen), mit wievielen doch sehr unterschiedlichen Techniken man in C++ zum Ergebnis kommen kann - kein Wunder, dass die Sprache als komplex gilt. Sie ist halt komplex - oder auch leistungsfähig - zumindest aber nicht trivial.

C++ User-Treffen Aachen 17.05.2018 - Bild 8
Foto 08: Sven Johannsen mit "10 Arten Array-Größen zu bestimmen"

Nach Svens Vortrag war endlich Zeit für die Pause - genug zu besprechen gab es ja. In vielen Gruppen wurde besonders über die 3-D Grafiken und Ray-Marching diskutiert, aber auch andere C++ Themen wurden erörtert. Ich nutze die Gelegenheit und organisierte weitere Vorträge für die nächsten C++ Treffen.

C++ User-Treffen Aachen 17.05.2018 - Bild 9
Foto 09: C++ User-Treffen Aachen 17.5.2018

Nach der Pause ging es mit einem Thema weiter, das mich besonders interessierte: "C++ Ranges". Viele kennen wie auch ich Andrei Alexandrescus Vortrag über "Iterators must go" - und es hatte seitdem mehrere Versuche gegeben eine neue STL zu entwickeln. Besonders erfolgreich war Eric Niebler mit seiner Range 3 Bibliothek, die mittlerweile auch für den C++ Standard (D4128) vorgeschlagen ist und wahrscheinlich in C++20 integriert sein wird. Ein Grund, sich mit Ranges zu beschäftigen - vor allem da mit seiner Range-Implementierung auf GitHub einem praktischen Einsatz schon jetzt nichts im Wege steht.

C++ User-Treffen Aachen 17.05.2018 - Bild 10
Foto 09: Markus Werle mit "Ranges in C++"

Markus motivierte die Probleme mit dem aktuellen Algorithmen Ansatz in der STL, und stellte in vielen Beispielen die Range-Bibliothek vor und beschrieb ausführlich ihre Ideen und Vorteile. Im direkten Vergleich konnte man gut sehen, dass Range-Code viel kürzer und übersichtlicher ist als vergleichbarer klassischer STL-Code - und der mehr deklarative Stil der Lesbarkeit zugutekommt.

C++ User-Treffen Aachen 17.05.2018 - Bild 11
Foto 09: Markus Werle mit "Ranges in C++"

Nach der eigentlichen Einführung in die Range-Bibliothek erzählte Markus noch von seinen praktischen Erfahrungen mit der Range-Bibliothek. Sie setzen sie schon seit längerem intensiv in produktivem Code ein, und sind begeistert von der Einfachheit und Ausdrücksstärke. Dazu zeigte er auch mehrere praktische Beispiele, die wirklich lesbar waren - ohne dabei für den Vortrag vereinfacht worden zu sein.

Markus jedenfalls ist sehr begeistert von der Range-Bibliothek. Und in der folgenden Diskussion merkte man schon, dass viele sehr interessiert waren und auch hofften sie bald einsetzen zu können. Die Präsentation und die Beispiele findet man auf GitHub.

C++ User-Treffen Aachen 17.05.2018 - Bild 12
Foto 09: C++ User-Treffen Aachen 17.5.2018

Drei nicht nur gute, sondern wirklich begeisternde Vorträge an einem Abend - das erlebt man selten. Und so blieben noch viele Teilnehmer lange da und diskutierten das Gehörte. Schade, dass an einem solchen Abend nicht mehr Leute da waren. Aber für die, die da waren, ist es sicher ein besonders gelungener Abend gewesen.

Den nächsten Termin, weitere Berichte und andere Informationen zu den C++ User-Treffen in Aachen finden sich auf meiner "C++ User-Treffen in Aachen" Seite.

C++ User-Treffen: