Contact us
Leave a message

Bitte benutzen:

Mein öffentlicher Kryptographie-Schlüssel


Mitglied bei

Logo "Bündnis '90/Die Grünen"
B'90/Grüne, OV Lehrte
Logo 'NABU Burgdorf, Lehrte, Uetze'
NABU Burgdorf, Lehrte, Uetze
Logo "Gospelchor 'Swing Low', Markus-Gemeinde, Lehrte"
Gospelchor "Swing Low", Markus-Gemeinde, Lehrte
Logo "Verein zum Erhalt klassischer Computer"
Verein zum Erhalt klassischer Computer

100 Picometer...

Screenshot Angstrom

...sind ein ångström (10-10 m). Und auch wenn ich ein großer Fan der Verwendung von SI-Einheiten bin, habe ich diese klangvolle, nach dem schwedischen Physiker Anders Jonas Ångström benannten Längeneinheit als Namen für meine kleine VR-Anwendung zur räumlichen Darstellung von Molekülstrukturen verwendet -- immerhin bewegt sich die Größe von Atomen und die Länge von chemischen Bindungen in der Größenordung eines ångström.

Wie sehen Atome aus?

Ångström unterstützt drei der üblichen Darstellungen von Molekülstrukturen:

Angstrom, Kalottenmodell
Angstrom, Stäbchenmodell
Angstrom, Kugel-Stäbchen-Modell
  • Kalottenmodell: Raumfüllende Darstellung, bei der Atome durch sich gegenseitig durchdringende Kugeln dargestellt werden, deren Radien proportional zu den Van-der-Vaals-Radien der jeweiligen Atome sind
  • Kugel-Stäbchen-Modell: Atome werden durch kleine Kugeln und die chemische Bindungen dazwischen durch dünne Stäbe dargestellt, wobei die Bindungsordnung durch eine entsprechende Anzahl parallele Stäbe repräsentiert wird (Doppelbindung zwei Stäbchen, Dreifachbindung drei Stäbchen usw.)
  • Stäbchen- oder Gittermodell: Atome erhalten keine eigene Repräsentation, sondern ergeben sich implizit aus den Enden der Bindungen, die wie im Kugel-Stäbchen-Modell dargestellt werden

Hier muss noch hier erwähnt werden, dass es mich einige Stunden Zeit und einiges an Vektor-Mathematik gekostet hat, bis ich herausbekommen habe, wie ich bei Mehrfachbindungen die Ebene bestimmen kann, in der ihre Stäbchen liegen sollten...

Was kann die Anwendung?

Die Strukturen der darstellbaren Moleküle bringt Ångström in einer eigenen kleinen Datenbank in Form einer JSON-Datei mit, deren Auswahl auf einer Liste "interessanter" Strukturen basiert, die ich irgendwo im Internet gefunden habe, sowie auf ein paar Verbindungen, die ich selbst noch hinzugefügt habe. Die JSON-Datei wird außerhalb von Godot über ein Python-Skript unter Zugriff auf die PubChem-Datenbank erstellt.

Angstrom, Auswahl-Panel

Die Auswahl der darzustellenden Struktur erfolgt einfach durch Blättern, per Zufall oder durch eine abschnittsweise darstellbare alphabetische Liste mit (systematischen und Trivial-) Namen. (Hier zeigt sich ein Nachteil der Verwendung von Standard-2D-GUI-Elementen in dieser VR-Anwendung: Es wäre viel angenehmer, wenn der vertikale Rollbalken der Liste links statt rechts angeordnet wäre, so dass man die Anfänge der aufgelisteten Namen beim Scrollen besser im Blick behalten könnte...)

Angstrom, Einstellungs-Panel

Schließlich gibt noch einen kleinen Einstellungs-Dialog, in dem -- mehr als Technologie-Demo als aus praktischen Gründen -- zwischen verschiedenen Beleuchtungs-Szenarien gewählt und die Lautstärke der Musik sowie der (wenigen) Geräusch-Effekte eingestellt werden kann.

Verwendete Technologie

Die Anwendung wurde mittels der freien Godot-Game-Engine (Version 3.3) implementiert, welche grundlegende VR-Unterstützung mitbringt. Konkret habe ich das Mobil-VR-Interface verwendet, das die Verwendung eines Smartphones als VR-Brille erlaubt (auch bekannt als Cardboard-Technik); der Lage-Sensor im Smartphone wird dabei benutzt, um die Kopfbewegungen zu verfolgen und das projezierte Bild entsprechend anzupassen.

Guckst Du hier!

Da die meisten Mobil-VR-Brillen keinen Button oder Controller aufweisen, erfolgt die Interaktion mit der Anwendung ausschließlich durch "Aktivierung durch Anstarren". Ein Zielmarkierung (das "Retikel") zeigt zu jedem Zeitpunkt an, was sich im Zentrum des Blickfeldes befindet. Blickt man auf ein interaktives Objekte (z. B. einen Button), verändert sich das Aussehen des Retikels, um auf die Interaktionsmöglichkeit hinzuweisen. Die eigentliche Interaktion erfolgt -- wo sinnvoll -- instantan oder nach Ablauf einer kurzen, durch einen Fortschritts-Indikator angezeigten Frist.

Eine Retikel-Funktion wird von der -- sonst sehr umfänglichen -- Godot-Engine nicht per Default bereitgestellt, so dass hier eigener Code zur Anzeige des Retikels, zur Bestimmung von Objekten in Blickrichtung und zur Aktivierung derselben zum Einsatz kommt.

Weitere erwähnenswerte technische Aspekte

Wie gesagt, Godot kommt mit einer Fülle nützlicher Funktionen für die Programmierung grafik-intensiver, interaktiver Anwendungen, kann aber natürlich nicht alle denkbaren Fälle abdecken. Hier ein paar weitere technische Aspekte, für die eigener Code zum Einsatz kommt (meist in der Form eigener Objektklassen oder "Nodes", wie die Grundbausteine in Godot heißen):

  • Schon erwähnt: Ein Retikel zur Anzeige und Aktivierung interaktiver Objekte
  • Auf Flächen im 3D-Raum projezierte GUI-Panels (mit Buttons, Scrollbars etc.), mit denen das Retikel über synthetische Maus-Ereignisse interagiert
  • Funktionen zur automatischen Skalierung und Positionierung von Objekten in Abhängigkeit von Position und Blickrichtung des Players; u. a. verwendet für das Head-Up-Display (HUD) mit Molekül- und Atom-Informationen
  • Ein Message-Bus zur weiteren Entkopplung von Modulen über das -- von Godot nativ unterstützte -- Beobachter-Pattern hinaus

Woher nehmen?

Den Quellcode gibt's auf meinem GitLab-Account; zum Bauen einfach Godot sowie die zugehörigen Export-Templates in passender Version herunterladen und das Projekt als Android-App exportieren. Die erzeugte .apk-Datei kann dann per adb install -r angstrom.apk auf's Smartphone gebracht werden -- sofern man auf dem Schlausprechapparet schon den Developer-Modus aktiviert hat. (Da ich mich mit dem iSomething-Ökosystem überhaupt nicht auskenne, kann ich leider nichts dazu sagen, wie man Ångström auf entsprechenden Geräten zum Laufen bringen kann.)

Oder schreib' mir 'ne Mail, und ich schicke Dir einfach eine fertiges .apk-Paket!